多个函数修改全局变量 - 如何在Python中声明
我在多个函数中使用了一个变量。
这些函数会改变这个变量的值。
我在第一个函数中已经把这个变量声明为“全局变量”了。
那么我在每个函数里还需要再声明一次这个变量为 global
吗?(这样做不会覆盖我在第一个函数中声明的全局变量)还是说我在这些函数里不需要再声明为 global
?(因为我第一次声明的时候已经把它当作全局变量了,所以在这些函数里局部变量依然能看到这个全局变量)
3 个回答
-2
我应该在每个函数里都把这个变量声明为全局变量吗?
其实你根本不应该使用全局变量,最好把这些变量和函数放到一个类里面去。
10
你可以在每个函数的定义中把一个变量声明为 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
5
global 关键字告诉解析器每个函数在赋值时不要把某个名字当作局部变量。
通常情况下,在函数中你绑定的任何名字(比如赋值、作为函数参数使用、在函数体内的导入语句中使用等)都会被解析器视为局部变量。
但是,如果你使用 global
关键字,解析器就会生成字节码,去查找一个全局变量。如果你有多个函数都要给这个全局变量赋值,你需要在所有这些函数中都声明这个名字为 global
。这样它们就会在全局命名空间中查找这个名字。
可以查看 global
语句的文档:
global
语句是一个声明,它在当前代码块的整个范围内有效。这意味着列出的标识符会被解释为全局变量。
还有 命名和绑定的文档:
如果一个名字在某个代码块中被绑定,它就是那个代码块的局部变量。如果一个名字在模块级别被绑定,它就是全局变量。(模块代码块的变量可以是局部的也可以是全局的。)如果一个变量在代码块中被使用但没有在那定义,它就是一个自由变量。