在python函数中使用全局变量
下面是在函数中使用在python函数中使用全局变量,python,Python,下面是在函数中使用x的代码 x = 1 def f(): y = x x = 2 return x + y print x print f() print x 但是python不会在函数范围外查找变量,它会导致UnboundLocalError:在赋值之前引用局部变量“x”。我不想修改全局变量的值,我只想在执行y=x时使用它 另一方面,如果我只是使用它作为回报,它会按预期工作: x = 1 def f(): return x print x print f() 有
x
的代码
x = 1
def f():
y = x
x = 2
return x + y
print x
print f()
print x
但是python不会在函数范围外查找变量,它会导致UnboundLocalError:在赋值之前引用局部变量“x”
。我不想修改全局变量的值,我只想在执行y=x
时使用它
另一方面,如果我只是使用它作为回报,它会按预期工作:
x = 1
def f():
return x
print x
print f()
有人能解释一下原因吗?如果要修改值,必须在函数中指定
global x
,
但是,仅读取值并不是强制性的:
x = 1
def f():
global x
y = x
x = 2
return x + y
print x
print f()
print x
输出
1
3
2
如果要修改值,必须在函数中指定
global x
,
但是,仅读取值并不是强制性的:
x = 1
def f():
global x
y = x
x = 2
return x + y
print x
print f()
print x
输出
1
3
2
我想我没有修改这个值。问题更新了
y=x
,没有修改x
,所以为什么我需要一个global
关键字here@IjazKhany=x
不是,而是x=2
是。但是x=2
意味着分配一个新的局部变量赋值,在这种情况下,python将首先查看局部范围。由于行y=x
位于该行上方,因此在这种情况下,python应该查看全局范围,并将值1设置为1y@IjazKhan如果没有global
,python会看到y=x
,因此它会基于全局x
实例化y
,因为读取全局变量是可以的。但是x=1
尝试修改全局变量x
,如果没有global x
,这是禁止的。其背后的想法是,读取全局变量是无害的,因此python让您在没有预防措施的情况下执行它。但是,修改全局变量可能会产生意外的结果,因此python要求您明确地说“我希望使用全局变量x
,并能够修改它”。我认为我没有修改该值。问题更新了y=x
,没有修改x
,所以为什么我需要一个global
关键字here@IjazKhany=x
不是,而是x=2
是。但是x=2
意味着分配一个新的局部变量赋值,在这种情况下,python将首先查看局部范围。由于行y=x
位于该行上方,因此在这种情况下,python应该查看全局范围,并将值1设置为1y@IjazKhan如果没有global
,python会看到y=x
,因此它会基于全局x
实例化y
,因为读取全局变量是可以的。但是x=1
尝试修改全局变量x
,如果没有global x
,这是禁止的。其背后的想法是,读取全局变量是无害的,因此python让您在没有预防措施的情况下执行它。但是,修改全局变量可能会产生意外的后果,因此python要求您明确地说“我想使用全局变量x
并能够修改它”。问题不是y=x
,而是y=x
与x=2
一起。删除其中一个,此错误将消失。(但是您可能会得到不同:)但是x=2
在y=x
下面,所以我的意思是python应该首先处理y=x
,将1分配给y,然后在x=2
行上创建一个新的局部变量并为其分配一个值2。不是吗?问题不在于y=x
而是y=x
和x=2
在一起。删除其中一个,此错误将消失。(但是您可能会得到不同:)但是x=2
在y=x
下面,所以我的意思是python应该首先处理y=x
,将1分配给y,然后在x=2
行上创建一个新的局部变量并为其分配一个值2。不是吗?