闭包是一种非常有用的语言功能。他们让我们做一些聪明的事情,这些事情本来需要很多代码,并且常常使我们能够编写更优雅,更清晰的代码。在Python 2.x中,闭包变量名不能反弹。也就是说,在另一个词法范围内定义的函数无法some_var = 'changed!'对其局部范围外的变量执行类似的操作。有人可以解释为什么吗?在某些情况下,我想创建一个在外部范围内重新绑定变量的闭包,但这是不可能的。我意识到,几乎在所有情况下(如果不是全部),这种行为都可以通过类来实现,但是它通常不那么简洁。为什么不能通过封闭方式进行?
这是重新绑定闭包的示例:
def counter():
count = 0
def c():
count += 1
return count
return c
调用时,这是当前行为:
>>> c()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 4, in c
UnboundLocalError: local variable 'count' referenced before assignment
我想要它做的是这样的:
>>> c()
1
>>> c()
2
>>> c()
3
慕少森
波斯汪
茅侃侃
相关分类