Strange Scoping in Nested Functions
本问题已经有最佳答案,请猛点这里访问。
我有两个嵌套的python函数,如下所示:
1 2 3 4 5 6 | def outer(): t = 0 def inner(): t += 1 print(t) inner() |
尝试调用
1 2 3 4 5 6 7 8 | >>> outer() Traceback (most recent call last): File"<stdin>", line 1, in <module> File"sally.py", line 6, in outer inner() File"sally.py", line 4, in inner t += 1 UnboundLocalError: local variable 't' referenced before assignment |
我想在
为什么会这样?除了每次打电话给
如果使用python 3,那么使用非本地关键字会让解释器知道使用
1 2 3 4 5 6 7 | def outer(): t = 0 def inner(): nonlocal t t += 1 print(t) inner() |
< BR>如果使用python 2,那么就不能直接给变量赋值,否则会使解释器创建一个新的变量t,它将隐藏外部变量。可以传入可变集合并更新第一个项:
1 2 3 4 5 6 | def outer(): t = [0] def inner(): t[0] += 1 print(t[0]) inner() |