python - 为什么您可以读取但不能修改全局值?

标签 python

>>> import sys
>>> print(sys.version)
2.4.4
>>> b = 11
>>> def foo2():
...    a = b
...    print a, b
...
>>> foo2()
11 11
>>> def foo3():
...    a = b 
...    b = 12
...    print a, b
...
>>> foo3()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in foo3
UnboundLocalError: local variable 'b' referenced before assignment
>>> def foo4():
...    global b
...    a = b
...    b = 12
...    print a, b
...
>>> foo4()
11 12

问题> 在foo3中,为什么你可以访问全局变量而不声明它,但你仍然不能修改它。

最佳答案

如果没有 global 声明,Python 编译器会扫描每个函数的整个代码,以查看函数代码中分配给 的变量。在 foo3() 中,您同时为 ab 赋值,因此它们都被视为函数内的局部变量。

当方法代码执行时,在你执行a = b的时候,b还没有值(因为你还没有给它赋值) .因此,您会得到一个 UnboundLocalError

这样做是为了在函数中使用变量总是引用相同的位置,即使还没有分配给它。

关于python - 为什么您可以读取但不能修改全局值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9447189/

相关文章:

python - 使用变量初始化解释器

python - PyCharm 文件编号表示

python - 如果出现在 python 中,如何从列值中删除额外的小数

python - 如何在 python 中抓取网页上的嵌入式脚本

python - scipy.io.wavfile.read 返回的数据是什么意思?

python - 如何从字符串中提取所有 UPPER? Python

python - bytes 没有 __bytes__ 方法

python - 以 sudo 身份运行 python 脚本的一部分

Python正则表达式findall在解析文本文件后返回空列表

python - 将模型导出到 PMML