python闭包和装饰

 
 
闭包:
闭包和装饰模式 相辅相成 def outter(fun): def inner(): print( '123 执行inner') fun() print( '789 执行inner') return inner def index(): print( '我是index...') #()执行 没有括号:传递 引用 ind = outter(index) ind()
如图:
更简单: def outter(fun): def inner(): print( '123 执行inner') fun() print( '789 执行inner') return inner @outter def index(): print( '我是index...') index() 如图:
案例: 海底捞饭店 def shucaipinpan(fun): def caidan(): print( '蔬菜拼盘85') return fun()+ 85 return caidan def niurou(fun): def caidan(): print( '内蒙古牛肉45') return fun()+ 45 return caidan def kele(fun): def caidan(): print( '可乐...5..') return fun()+ 5 return caidan @kele @niurou @shucaipinpan def guodi(): print( '菌汤锅 ..25..') return 25 money = guodi() print( '总消费:',money) 如图:
内部带参:
案例1.
first = [] def outter(): def inner(y): lam= lambda x,y:x+y for x in range( 1, 5): first.append(lam(x,y)) return inner out = outter() out( 9) for y in first: print(y)
如图:
2.
first = [] def outter(fun): def inner(y): # lam=lambda x,y:x+y for x in range( 1, 5): first.append(fun(x,y)) return inner def suan(x,y): return x*y out = outter(suan) out( 9) for i in first: print(i) 如图:
python3里面的特性:
eval:转换 x = int( input( "请输入第一个数字:")) y = int( input( "请输入第二个数字:")) fun = input( "请输入一个函数:") #输入一个匿名函数如:lambda x,y:x+y fun = eval(fun) ret = fun(x,y) print(ret)
如图:


完毕!

猜你喜欢

转载自blog.csdn.net/angelayouran/article/details/80425441