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)
如图:
完毕!