我想在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