我在多个功能中使用了一些变量
这包括通过每个函数更改变量值
我已经将变量声明为' global'在第一个功能。
我应该在每个函数中一次又一次地将此变量声明为global
(并且这不会覆盖我在第一个函数中声明的第一个global
变量)或者我不应该再次将其声明为{{1}在所有这些函数中(但是局部变量仍然会被视为global
,因为我已经第一次声明了这个变量)?
答案 0 :(得分:6)
您可以在每个函数定义中将变量声明为global
。这是一个例子:
def f():
global x
x = 2
print x
x +=2
# This will assign a new value to the global variable x
def g():
global x
print x
x += 3
# This will assign a new value to the global variable x
f()
# Prints 2
g()
# Prints 4
print x
# Prints 7
答案 1 :(得分:3)
global关键字告诉解析器每个函数,在分配名称时不应将名称视为本地名称。
通常在函数中绑定的任何名称(赋值,用作函数体,在函数体中的import语句中使用等)都被解析器视为本地。
通过使用global
关键字,解析器将生成字节码,而不是寻找全局名称。如果您有多个分配给全局的函数,则需要在所有这些函数中声明该名称global
。然后,他们将在全局命名空间中查找名称。
请参阅global
statement documentation:
global
语句是一个声明,它包含整个当前代码块。这意味着列出的标识符将被解释为全局变量。
和Naming and Binding documentation:
如果名称绑定在块中,则它是该块的局部变量。如果名称在模块级别绑定,则它是全局变量。 (模块代码块的变量是局部的和全局的。)如果在代码块中使用了变量但没有在那里定义,则它是一个自由变量。
答案 2 :(得分:-2)
我应该在每个函数中一次又一次地声明这个变量
您根本不应该有任何全局变量,并将这些变量和函数放入一个类中。