代码1:
x=4
def func():
print("HELLO WORLD")
y=x+2
print (y)
print (x) # gives o/p as HELLO WORLD 6,4,4.
func()
print (x)
代码2:
x=4
def func():
print("HELLO WORLD")
y=x+2
x=x+2 # gives an error here
print (y)
print (x)
func()
print (x)
在第一个代码中,它没有显示任何错误,它将x
值添加到2并返回y
,并将o / p打印为6,4,4
。但实际上,正如我所知,它应该指出一个错误,因为我没有在x
内给出func()
变量的全局声明。但是,它没有考虑任何错误,但在Code 2
中,它会出错x referenced before assignment
。
问题是可以x
可以将其值赋值给其他变量吗?即使没有跟随全球宣言?
答案 0 :(得分:3)
您可以读取全局变量,而无需将其明确声明为全局变量(代码1)
但是,如果没有明确地将其声明为全局变量,则不允许分配给全局变量。 (代码2)
这是因为阅读没有任何害处,但是在分配时你可能会遇到意想不到的行为(特别是如果它是一个包含许多变量的长代码而你认为它是你正在使用的唯一名称,但事实并非如此)。
答案 1 :(得分:1)
在第一个函数中,您尚未分配给x,因此编译器不会将其视为局部变量。运行时将自动从包含范围获取x。您可以轻松检查x不被视为局部变量:
>>> func1.__code__.co_varnames
('y',)
在您分配给x的第二个函数中,编译器将其视为局部变量:
>>> func2.__code__.co_varnames
('x', 'y')
因此您看到错误:UnboundLocalError: local variable 'x' referenced before assignment
。