我制作了以下示例来更改其中一个全局变量。
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