def lazy_sum(*args):
def sum():
ax = 0
for n in args:
ax = ax + n
return ax
return sum
lazy_sum(1,2,3,4,5)
<function sum at 0x10452f668>
lazy_sum(1,2,3,4,5)()
15
函数lazy_sum里定义了函数sum,sum和args就组成了闭包。
局部变量
nonlocal 与 global 的区别在于 nonlocal 语句会去搜寻本地变量与全局变量之间的变量,其会优先寻找层级关系与闭包作用域最近的外部变量。
装饰器
Decorator,简单说就是把被装饰的函数作为参数,传递给与装饰器对应的函数。
本质上是语法糖
什么是闭包
闭包是一类特殊的函数。如果一个函数定义在另一个函数的作用域中,并且函数中引用了外部函数的局部变量(自由变量),那么这个函数就是一个闭包。被引用的自由变量即使已经离开了创造它的环境,也和函数一同存在。
函数lazy_sum里定义了函数sum,sum和args就组成了闭包。
局部变量
nonlocal 与 global 的区别在于 nonlocal 语句会去搜寻本地变量与全局变量之间的变量,其会优先寻找层级关系与闭包作用域最近的外部变量。
闭包与修饰器
闭包的作用
惰性求值
函数式编程的主题之一是关注分离(separation of concerns)。希望将计算的描述与实际运行分离 一般而言,惰性化对一个表达式分离了它的描述和求值。 https://segmentfault.com/a/1190000017066715?utm_source=tag-newest#articleHeader1 https://jijing.site/sicp/20190414-fp-closure-iterator.html