带有 UnboundLocalError 的本地和全局引用

2024-05-13

我不太明白为什么代码

def f():
    print(s)

s = "foo"
f()

运行得很好但是

def f():
    print(s)
    s = "bar"

s = "foo"
f()

给我 UnboundLocalError。我知道我可以通过声明来解决这个问题s作为函数内的全局变量或简单地传递s函数中的一个参数。

我仍然不明白 python 似乎如何知道在执行该行之前函数内部是否引用了 s ?当函数被读入全局框架时,python 是否会生成某种所有局部变量引用的列表?


其他答案都集中在实际方面,但没有真正回答您提出的问题。

是的,Python 编译器在编译代码块(例如在def)。如果在块中分配了名称,编译器会将其标记为本地。看一下function.__code__.co_varnames查看编译器已识别哪些变量。

The nonlocal and global语句可以覆盖这一点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带有 UnboundLocalError 的本地和全局引用 的相关文章

随机推荐