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
















原文地址:https://www.cnblogs.com/jinbaobao/p/10613631.html