多个函数修改全局变量 - 如何在Python中声明

3 投票
3 回答
10882 浏览
提问于 2025-04-18 08:18

我在多个函数中使用了一个变量。
这些函数会改变这个变量的值。
我在第一个函数中已经把这个变量声明为“全局变量”了。
那么我在每个函数里还需要再声明一次这个变量为 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 语句是一个声明,它在当前代码块的整个范围内有效。这意味着列出的标识符会被解释为全局变量。

还有 命名和绑定的文档

如果一个名字在某个代码块中被绑定,它就是那个代码块的局部变量。如果一个名字在模块级别被绑定,它就是全局变量。(模块代码块的变量可以是局部的也可以是全局的。)如果一个变量在代码块中被使用但没有在那定义,它就是一个自由变量。

撰写回答