一、闭包函数
一、什么是闭包
1、一个定义在函数内部的函数,闭包可以让变量脱离了该函数的作用域也依然能被访问到
2、定义一个嵌套函数,内函数内部使用外函数变量,让外函数将内函数当做参数返回,这样就组成了一个闭包
二、写法
def outer(x):
def inner():
y = x * 2
return y
return inner
result=outer(10)
print(result())
三、执行过程
1、调用外函数(outer),将参数赋值给x,此时x=10
2、执行外函数(outer),内函数(inner)不会被执行
3、执行到return语句此时返回内函数inner对象(不会被调用)
4、此时外函数(outer)执行结束的时候发现内部函数会用到自己的临时变量
5、此时外函数(outer)临时变量就不会释放,会绑定给内函数内函数(inner)继续使用
6、此时result得到的结果就是inner引用(对象),调用result就等于执行内函数(inner)
二、普通装饰器
一、原理
1、闭包的特性
2、函数可以被当做参数传递
二、不使用语法糖
import time
def out(fn):
def inner():
start_time = time.time()
result = fn()
end_time = time.time()
return result,end_time - start_time
return inner
def demo():
print("demo")
time.sleep(1)
return "success"
if __name__ == '__main__':
new_demo = out(demo)
result = new_demo()
print(result)
三、无参数的装饰器,语法糖实现
import time
def out(fn):
def inner():
start_time = time