why the inner function can't get variable in outer scope in python
1 2 3 4 5 6 7
| def foo():
m = 3
def bar():
print(m) # code 1
m=4 # code 2
bar()
foo() |
UnboundLocalError: local variable 'm' referenced before assignment
我为什么要买UnboundLocalError?我知道bar不能改变m的价值,但bar不能仅仅得到m的价值吗?
当我分别尝试代码1/code 2时,一切都正常。
- 你的压痕不正确,请先修一下!
- 如果函数包含对变量的赋值,并且没有global或nonlocal声明,则该变量是局部变量,即使在赋值之前函数中的点也是如此。
- @???????谢谢!格式真的很重要。
- @贾森哈珀,谢谢,我大致理解。这真的很有帮助。
由于内部函数bar有一个赋值m=4,因此m被认为是整个函数的局部变量。但在调用print(m)时,m尚未创建。所以你得到了错误UnboundLocalError: local variable 'm' referenced before assignment。
要修复它,可以将m声明为全局变量。或者避免在bar内分配
- 所以编译器看了整个函数栏,知道有一个局部的m,但是python不是逐行执行的吗?我猜py->pyc的过程是这样的(看了整个函数栏),然后机器逐行执行pyc。(我搜索互联网)对不起,我是个新手,谢谢!