Python学习函数篇

Python学习函数篇

这几天一直在学习Python,今天列出一些Python特有的函数和使用方法

1.lambda,filter,map,reduce,partial用法

  1. # code=UTF-8
  2. from functools import partial
  3.  
  4. def lambdaTest():
  5. "lambda 返回一个匿名函数的引用"
  6. add = lambda x, y: x + y
  7. print "1 add 2 = %d," % (add(1, 2))
  8. def filterTest():
  9. "filter(func, seq) seq逐一传入func,若func返回True,这当期seq的值放入新的seq中"
  10. def odd(x):
  11. return x % 2
  12. print filter(odd, range(10))
  13. def odd10():
  14. "10以内奇数"
  15. print [i for i in range(10) if i % 2]
  16.  
  17. def sumOdd10():
  18. "10以内奇数和"
  19. print reduce((lambda x,y: x + y), [i for i in range(10) if i % 2])
  20. def mapReduceTest(x):
  21. "MapReduce实现求X以内计数和"
  22. print "Map Reduce sum odd 10 result: %d" % reduce((lambda x,y: x + y), map(lambda x: x if x % 2 else 0, range(x)))
  23.  
  24. def partialTest():
  25. "partial 将参数出入func中形成一个新的func引用, 可以使用partial实现一个subfunction DRY!"
  26. sumodd10 = partial(mapReduceTest, 10);
  27. print "partial",
  28. sumodd10()
  29. if __name__ == "__main__":
  30. lambdaTest()
  31. filterTest()
  32. odd10()
  33. sumOdd10()
  34. mapReduceTest(10)
  35. partialTest()

2.修饰器用法"@"

  1. #code=UTF-8
  2. from time import ctime, sleep
  3.  
  4. def tsfunc(func):
  5. "创建一个修饰器,有点像Java中的Annotation,但是Python的更容易创建"
  6. def wrappedFunc() :
  7. print '[%s] %s() called' % (ctime(), func.__name__)
  8. return func()
  9. return wrappedFunc
  10. @tsfunc
  11. def foo():
  12. pass
  13.  
  14. if __name__ == "__main__":
  15. foo()
  16. sleep(4)
  17. for i in range(2):
  18. sleep(1)
  19. foo()

3.生成器yield用法

  1. #code=utf-8
  2. def yield1():
  3. print "step1"
  4. yield 1
  5. print "step2"
  6. #当调用next遇到yield后返回,下一次调用next时继续执行知道遇到下一个yield为止
  7. yield 2
  8. print "step3"
  9. def testYield1():
  10. y = yield1()
  11. print y.next()
  12. print y.next()
  13. #print y.next()
  14. def yield2():
  15. i = 0
  16. while True:
  17. yield i
  18. i += 1
  19.  
  20. def testYield2():
  21. "每次调用next() 返回i的值"
  22. y = yield2()
  23. for i in range(100):
  24. print "Yield value=%d" % y.next()
  25.  
  26. if __name__ == "__main__":
  27. testYield1()
  28. testYield2()

Archived in