闭包:
闭包和装饰模式
相辅相成
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)
如图:
完毕!