闭包
def fun():
temp = [lambda x: i*x for i in range(4)]
return temp
for everyLambda in fun():
print(everyLambda(2))
运行结果
6
6
6
6
什么是闭包?
闭包就是外部函数中定义了一个内部函数,当外部函数返回内部函数对象(注意是函数对象)时,程序接收了内部函数的定义(此时并未被执行),当再次执行这个返回值时,这个被返回的函数才能被执行。
创建一个闭包必须满足以下几点:
-
必须有一个内嵌函数
-
内嵌函数必须引用外部函数中的变量
-
外部函数的返回值必须是内嵌函数
闭包和装饰器的区别:闭包传递的是变量,而装饰器传递的是函数,除此之外没有任何区别,或者说装饰器是闭包的一种,它只是传递函数的闭包。
作用: 它保存了函数的外部变量,不会随着变量的改变而改变了
装饰器
python装饰器本质上就是一个函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外的功能,装饰器的返回值也是一个函数对象。
def dec(func1):
def wrapper(*args, **kwargs):
print('我被执行了')
return func1(*args, **kwargs)
return wrapper
@dec
def sum_a():
print("我是sum-a, 我被执行了")
return 'haha'
msg = dec(sum_a)()
# print(msg)
# msg = sum_a()
print(msg)