将 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