python - 带有 UnboundLocalError 的本地和全局引用

标签 python function global local

我不太明白为什么代码

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 以查看编译器已识别哪些变量。

nonlocalglobal 语句可以覆盖它。

关于python - 带有 UnboundLocalError 的本地和全局引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47620697/

相关文章:

python - Django 管理命令未正确导入

python - python对象的numpy数组

java - 变量在传递给函数时会更改其值

Javascript 函数只调用了一半的时间

java - 如何从另一个类访问字符串值?

python - 在为 DataFrame 系列创建类别时如何从 QCUT 中获取整数

python - GQLQuery 检索空结果集

javascript - 为什么这个函数会调用两次?

c++ - C++ 应用程序中全局变量的使用

c++全局函数与根据内存的数据成员函数