Python闭包和装饰器
如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)
1、
def hello():
x=3 #x表示外部作用域,(外部变量)
def world(): #内部函数块, 功能就是打印x
print(x) #引用外部变量x,
return world #返回内部函数,形成一个闭包
执行这个闭包得到的结果就是
f1 = hello()
f1() # 3
2、
当然这个x可以当成一个参数来传递,如:
def hello(x):
#x=3 #x表示外部作用域,(外部变量)
def world(): #内部函数块, 功能就是打印x
print(x) #引用外部变量x,
return world #返回内部函数,形成一个闭包
执行这个闭包得到的结果就是
f1 = hello(10)
f1() # 10
3、
在python中,函数也可以当成一个参数
def hello(test):
# 函数test表示外部作用域,(外部变量),这个test可以取别的名字
def world(): #内部函数块, 功能是先打印123,然后再执行这个test函数 ,这个test函数只是一个变量
print("123")
test() #引用外部变量x,
return world #返回内部函数,形成一个闭包
先创建一个函数
def mm():
print("mm 是最帅的")
执行这个闭包得到的结果就是
f1 = hello(mm) #把函数mm当成一个参数
f1() # 123 mm 是最帅的
4、装饰器
其实在3中的例子,就是一个装饰器,用法就是
@hello
def nn():
print("nn 是最帅的")
执行这个函数的结果
nn() # 123 nn 是最帅的
这里解释一下为什么会打印123呢,因为hello这个装饰器的功能就是打印123
窈窕包包,君子好逑