def closure():
a = 2
def f():
if a < 5:
print a
return f
closure()()
閉じた変数を読み取ることができるので、私には理にかなっています。
def closure():
a = 2
def f():
if a < 5:
a += 1
print a
return f
closure()()
になりますFile "closure_problems.py", line 4, in f
if a < 5:
UnboundLocalError: local variable 'a' referenced before assignment
。
閉じた変数に代入できないことを知っているので、それは私にとっても理にかなっています。if a < 5
しかし、行番号が実際の問題のあるステートメントであると思われるものの代わりに参照しているのは奇妙ですa += 1
.
この
def closure():
a = 2
def f():
if a < 5:
print a
a += 1
return f
closure()()
結果は のみになりFile "closure_problems.py", line 4, in f
if a < 5:
UnboundLocalError: local variable 'a' referenced before assignment
ます。2
それは私がまったく理解していない印刷さえしません。
インタープリターは、ブロック内のすべてを (評価せずに) 解析して、ローカルa
またはグローバルのどちらについて話しているのかを調べようとしていますか?