Python学习函数篇
由 cobra 于 周五, 2008-08-22 17:19 提交。这几天一直在学习Python,今天列出一些Python特有的函数和使用方法
1.lambda,filter,map,reduce,partial用法
# code=UTF-8 from functools import partial def lambdaTest(): "lambda 返回一个匿名函数的引用" add = lambda x, y: x + y print "1 add 2 = %d," % (add(1, 2)) def filterTest(): "filter(func, seq) seq逐一传入func,若func返回True,这当期seq的值放入新的seq中" def odd(x): return x % 2 print filter(odd, range(10)) def odd10(): "10以内奇数" print [i for i in range(10) if i % 2] def sumOdd10(): "10以内奇数和" print reduce((lambda x,y: x + y), [i for i in range(10) if i % 2]) def mapReduceTest(x): "MapReduce实现求X以内计数和" 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))) def partialTest(): "partial 将参数出入func中形成一个新的func引用, 可以使用partial实现一个subfunction DRY!" sumodd10 = partial(mapReduceTest, 10); print "partial", sumodd10() if __name__ == "__main__": lambdaTest() filterTest() odd10() sumOdd10() mapReduceTest(10) partialTest()
2.修饰器用法"@"
#code=UTF-8 from time import ctime, sleep def tsfunc(func): "创建一个修饰器,有点像Java中的Annotation,但是Python的更容易创建" def wrappedFunc() : print '[%s] %s() called' % (ctime(), func.__name__) return func() return wrappedFunc @tsfunc def foo(): pass if __name__ == "__main__": foo() sleep(4) for i in range(2): sleep(1) foo()
3.生成器yield用法
#code=utf-8 def yield1(): print "step1" yield 1 print "step2" #当调用next遇到yield后返回,下一次调用next时继续执行知道遇到下一个yield为止 yield 2 print "step3" def testYield1(): y = yield1() print y.next() print y.next() #print y.next() def yield2(): i = 0 while True: yield i i += 1 def testYield2(): "每次调用next() 返回i的值" y = yield2() for i in range(100): print "Yield value=%d" % y.next() if __name__ == "__main__": testYield1() testYield2()
最新评论
5 天 4 小时 前
1 周 1 小时 前
1 周 1 小时 前
1 周 1 天 前
1 周 1 天 前
4 周 4 天 前
1 年 11 周 前
1 年 11 周 前
1 年 49 周 前
1 年 51 周 前