将 python 中的全局变量分配给单个变量或函数?
Assigning global variables in python to a single variable or function?
我想我理解了为什么必须使用全局变量来绑定函数内外的变量。所以如果我打电话:
x = 0
y = 0
z = 0
def example():
global x
global y
global z
我将能够改变函数之外的 x、y、z。
但是,有没有办法将我需要的所有全局变量分配给其他东西,然后在一行中调用它们。
我试过了:
def global_var():
global x
global y
global z
然后调用:
def example():
global_var()
x += 1
etc
但这似乎不起作用。或者至少代码似乎首先遇到 x 变量并抛出赋值前错误。
关键字 global 具有方法作用域,因此当您在 global_var() 中调用它时,它们将可用于在其中进行修改。然而,当你从它 return 进入 example() 时。您的全局不再有效,因此 x 是只读的,您不能修改它的值。你必须摆脱 gloval_var()
def example():
global x
global y
global z
x += 1
但是如果我可以推荐你。不要使用这样的方法。如果这些变量以某种方式相关,请使用字典,这样您就可以简单地做到。
my_vars = {'x':0, 'y':0, 'z':0}
def example():
my_vars['x'] += 1
在这种情况下,字典不需要全局关键字来修改。这背后的原因是您没有分配新值,而只是修改现有对象。如果你写 x += 2
它意味着 x = x + 2
这将导致一个新的分配,这导致 x
指向另一个值,如果没有 global
这是不可能的。然而,如果你修改 my_vars,它的内存地址保持不变,只是它的数据发生变化,因为 dict
是一个可变值。
您可以创建修改全局变量的函数:
x = 0
y = 0
z = 0
def setGlobals(**vals):
for key, value in vals.iteritems():
globals()[key] = value
print x, z
setGlobals(x=5, z=3)
print x, z
输出:
0 0
5 3
我想我理解了为什么必须使用全局变量来绑定函数内外的变量。所以如果我打电话:
x = 0
y = 0
z = 0
def example():
global x
global y
global z
我将能够改变函数之外的 x、y、z。
但是,有没有办法将我需要的所有全局变量分配给其他东西,然后在一行中调用它们。
我试过了:
def global_var():
global x
global y
global z
然后调用:
def example():
global_var()
x += 1
etc
但这似乎不起作用。或者至少代码似乎首先遇到 x 变量并抛出赋值前错误。
关键字 global 具有方法作用域,因此当您在 global_var() 中调用它时,它们将可用于在其中进行修改。然而,当你从它 return 进入 example() 时。您的全局不再有效,因此 x 是只读的,您不能修改它的值。你必须摆脱 gloval_var()
def example():
global x
global y
global z
x += 1
但是如果我可以推荐你。不要使用这样的方法。如果这些变量以某种方式相关,请使用字典,这样您就可以简单地做到。
my_vars = {'x':0, 'y':0, 'z':0}
def example():
my_vars['x'] += 1
在这种情况下,字典不需要全局关键字来修改。这背后的原因是您没有分配新值,而只是修改现有对象。如果你写 x += 2
它意味着 x = x + 2
这将导致一个新的分配,这导致 x
指向另一个值,如果没有 global
这是不可能的。然而,如果你修改 my_vars,它的内存地址保持不变,只是它的数据发生变化,因为 dict
是一个可变值。
您可以创建修改全局变量的函数:
x = 0
y = 0
z = 0
def setGlobals(**vals):
for key, value in vals.iteritems():
globals()[key] = value
print x, z
setGlobals(x=5, z=3)
print x, z
输出:
0 0
5 3