python匿名函數lambda與switch的實現,pythonlambda
1,lambda的文法跟es6的箭頭函數差不多
>>> show=lambda x,y: x * y>>> show( 10, 20 )200
2,遞迴求階乘
>>> def fab( n ):... if n == 0:... return 1... else:... return n * fab( n - 1)... >>> fab( 3 )6>>> fab( 5 )120>>> fab( 6 )720>>>
利用reduce函數,也可以實現累計運算
>>> l = range( 1, 6 )>>> l[1, 2, 3, 4, 5]>>> def f( x, y ):... return x * y... >>> reduce( f, l )120>>>
不需要定義函數,可以用lambda運算式簡化
>>> fab = lambda x, y: x * y>>> reduce( fab, [ 1, 2, 3, 4, 5, 6 ] )720>>> reduce( lambda x,y: x *y, [ 1, 2, 3, 4, 5, 6 ] )720>>>
3,字典+函數可以實現switch的分支判斷效果
if。。。。else實現一個加減法
#!/usr/bin/python#coding:utf-8from __future__ import divisiondef add( a, b ): return a + bdef sbb( a, b ): return a - bdef mul( a, b ): return a * bdef div( a, b ): return a / bdef oper( x, o, y ): if o == '+': return add( x, y ) elif o == '-': return sbb( x, y ) elif o == '*': return mul( x, y ) elif o == '/': return div( x, y ) else: passprint oper( 10, '/', 20 )
用字典和函數改造成switch的方式
#!/usr/bin/python#coding:utf-8from __future__ import divisiondef add( a, b ): return a + bdef sbb( a, b ): return a - bdef mul( a, b ): return a * bdef div( a, b ): return a / boper = { '+' : add, '-' : sbb, '*' : mul, '/' : div }def mySwitch( o, x, y ): #return oper[o]( x, y ) #oper.get(o)等價於oper[0]取字典中的某一項 return oper.get(o)( x, y )print mySwitch( '/', 10, 20 )