我想在python中建立一个计数器与闭包的属性。在以下工作中的代码:蟒蛇计数器与关闭
def generate_counter():
CNT = [0]
def add_one():
CNT[0] = CNT[0] + 1
return CNT[0]
return add_one
然而,当我改变列表CNT一个变种,它不工作:
def generate_counter1():
x = 0
def add_one():
x = x + 1
return x
return add_one
当我打印实例的封闭性,我找到了第二种情况是__closure__
没有:
>>> ct1 = generate_counter()
>>> ct2 = generate_counter1()
>>> print(ct1.__closure__[0])
<cell at 0xb723765c: list object at 0xb724370c>
>>> print(ct2.__closure__)
None
只是想知道为什么在外部函数的索引必须是一个列表?
感谢您的回答!找到明确解释此问题的文档 https://docs.python.org/3/faq/programming.html#why-am-i-getting-an-unboundlocalerror-when-the-variable-has-a-value
看起来像这是一个副本http://stackoverflow.com/questions/4851463/python-closure-write-to-variable-in-parent-scope – ChatterOne