你能解释关闭(因为它们与Python有关)吗?
我一直在阅读很多关于关闭的内容,我想我理解他们,但是没有让我自己和其他人蒙混过关,我希望有人能够尽可能简洁清楚地解释关闭。 我正在寻找一个简单的解释,可以帮助我了解我想要使用它们的位置和原因。
关闭关闭
对象是附带方法的数据,闭包是附带数据的函数。
def make_counter():
i = 0
def counter(): # counter() is a closure
nonlocal i
i += 1
return i
return counter
c1 = make_counter()
c2 = make_counter()
print (c1(), c1(), c2(), c2())
# -> 1 2 1 2
很简单:引用来自包含范围的变量的函数,可能在控制流程已经离开该范围之后。 最后一点非常有用:
>>> def makeConstantAdder(x):
... constant = x
... def adder(y):
... return y + constant
... return adder
...
>>> f = makeConstantAdder(12)
>>> f(3)
15
>>> g = makeConstantAdder(4)
>>> g(3)
7
请注意,12和4分别在f和g内部“消失”,这个特征使f和g正确关闭。
我喜欢这个粗略的,简洁的定义:
一个可以引用不再活动的环境的函数。
我会补充
闭包允许您将变量绑定到函数中,而不用将它们作为参数传递。
接受参数的装饰器是闭包的常见用法。 闭包是这种“功能工厂”的常见实现机制。 当战略在运行时被数据修改时,我经常选择在战略模式中使用闭包。
在一种允许匿名块定义的语言中,例如Ruby,C#闭包可以用来实现新的控制结构。 缺乏匿名块是Python中闭包的限制之一。
链接地址: http://www.djcxy.com/p/1449.html