私はクロージャのプロパティを持つpythonでカウンタを作成しようとしています。次の作品にコード:python counter with closure
def generate_counter():
CNT = [0]
def add_one():
CNT[0] = CNT[0] + 1
return CNT[0]
return add_one
私はVARにリストCNTを変更した場合しかし、それは動作しませんでした:
def generate_counter1():
x = 0
def add_one():
x = x + 1
return x
return add_one
私は、インスタンスの閉鎖プロパティを印刷するとき、私が見つけました
>>> ct1 = generate_counter()
>>> ct2 = generate_counter1()
>>> print(ct1.__closure__[0])
<cell at 0xb723765c: list object at 0xb724370c>
>>> print(ct2.__closure__)
None
ちょうど外側の関数のインデックスをリストにする必要があり、なぜ疑問に思う:第二例__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