概念:在一个函数内部再定义一个函数,定义的函数引用外部函数的变量,那么这个定义的函数和变量就叫闭包。
#如果要修改变量,先用nonlocal申明
例子:类定义
class lnfun(object):
def __init__(self,k,b):
self.k=k
self.b=b
def cal(self,x):
print(self.k*x+self.b) #较麻烦
例子:装饰器
def outer(k,b):
def inner(x):
print(kx+b)
return inner #使用闭包的优点是代码精简
调用:
a=outer(1,2)
a(5)
装饰器:
概念:在不修改函数功能的基础上,扩展功能
单层装饰器:
def outer(fun):
def inner():
print('你真皮')
fun()
return inner
@outer #base_fun=outer(base_fun)
def base_fun():
print('瞅你咋地')
base_fun() #相当于加了一层装饰
多层装饰器:
def out1(fun):
print('快点吃饭啊')
def in1():
print('那就别吃了')
fun()
return in1
def out2(fun):
print('不吃饭打你屁屁')
def in2():
print('吃什么好呢')
return in2
@out1 # eat=out1(eat)
@out2 # eat=out2(eat)
def eat():
print('没有食欲')
eat()
“”“调用顺序:装饰器装饰遵循最近原则,理解引用,引用的是in指向的代码块。“”“