更改函数arg中的全局var



我制作了以下示例来更改其中一个全局变量。

a1 = 0
a2 = 0
a3 = 0
a4 = 0  #and more global variables
def foo():
global a3
if a3 < 1:
a3 = 1
foo()
print a3   #is 1

但我不想为每个全局变量创建一个函数。所以,我做了下面的一个。

a1 = 0
a2 = 0
a3 = 0
a4 = 0  #and more global variables
def foo(name):
global name
if name < 1:
name = 1
foo(a3)
print a3   #expect 1

我收到一条错误信息。

SyntaxError: name 'name' is local and global

我不知道如何解决这个问题。请帮忙。

您需要通过修复程序设计来解决问题。你所做的是不好的做法。查找针对全局变量的许多警告。

您似乎也没有理解变量名称和它所代表的概念之间的区别。别担心;你会得到更多的练习。您在这里所要做的只是更改各个程序模块共享的变量的值。一种方法是使用可变的数据结构,并正确地传递它。例如:

def foo(a_values, pos):
if a_values[pos] < 1:
a_values[pos] = 1
a = [0, 0, 0, 0]
foo(a, 3)
print(a[3])

另请参阅变量数量。

您可以使用字典:

variables = {
"a1": 0,
"a2": 0,
"a3": 0,
"a4": 0 # add as many as you want
};
def foo(name):
global variables
if variables[name] < 1:
variables[name] = 1
foo("a3")
print variables["a3"]  # output should be 1

或列表

a = [0, 0, 0, 0] # add as many as you want

def foo(index):
global a
if a[index] < 1:
a[index] = 1
foo(2)
print a[2]  # output should be 1

最新更新