我不太明白为什么代码
def f():
print(s)
s = "foo"
f()
运行得很好,但是
def f():
print(s)
s = "bar"
s = "foo"
f()
给我 UnboundLocalError。我知道我可以通过将 s 声明为函数内的全局变量或简单地将 s 参数传递到函数中来解决此问题。
我仍然不明白Python如何在执行该行之前知道函数内部是否引用了s?当函数被读入全局框架时,Python 是否会生成某种所有局部变量引用的列表?
最佳答案
其他答案都集中在实际方面,但没有真正回答您提出的问题。
是的,Python 编译器在编译代码块(例如在 def
中)时会跟踪分配了哪些变量。如果在 block 中分配了名称,编译器会将其标记为本地。查看 function.__code__.co_varnames
以查看编译器已识别哪些变量。
nonlocal
和 global
语句可以覆盖它。
关于python - 带有 UnboundLocalError 的本地和全局引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47620697/