【发布时间】:2019-03-31 02:48:15
【问题描述】:
当我尝试在函数内重新分配变量时,我收到UnboundLocalError 错误。以下是我的问题的 sn-p。
global_variable = 'a'
def abc():
print(global_variable)
global_variable = 'b'
abc()
当我执行它时,我得到以下信息:
Traceback (most recent call last):
File "/Users/arghyasaha/hobby_project/python_experiment/python_experiment/random_experiment/del_me.py", line 7, in <module>
abc()
File "/Users/arghyasaha/hobby_project/python_experiment/python_experiment/random_experiment/del_me.py", line 4, in abc
print(global_variable)
UnboundLocalError: local variable 'global_variable' referenced before assignment
为了解决这个问题,我们可以像这样使用global关键字
global_variable = 'a'
def abc():
global global_variable
print(global_variable)
global_variable = 'b'
abc()
我正在寻找解释,对于这种行为,它似乎有点类似于 javascript 中的提升概念。我确实找到了一些资源,例如source1、source2,但它们都没有解释得足够好。有人可以正确解释 python 中到底发生了什么吗?
【问题讨论】:
-
虽然人们倾向于将 CPython 称为解释型语言,但它是字节码编译的:函数在编译时初始化其命名空间。因此,局部变量
global_variable在您调用print(global_variable)之前就已经在命名空间中,尽管它当时是未绑定的(即没有为其分配引用),因此会出现错误。 -
这能回答你的问题吗? Python variable scope error
标签: python python-2.7 hoisting