Skip to main content
 首页 » 编程设计

python之Python 中的全局变量

2025年05月04日14wuhuacong

我对 python 中的全局变量有疑问。 如果我做对了,我在我的类中定义的所有变量都可以从这个类中的每个方法中读取。 现在我认为如果我之前用全局“variableName”标记它们,我只能写入全局变量。但让我害怕的是:

def foo(a): 
    for i in range(a[0].__len__()): 
        a[0][i] -= a[1][i] 
a = [[0,1,2,3,4,5,6],[0,1,2,3,4,5,6]] 
foo(a) 
print(a) 

给我

[[0, 0, 0, 0, 0, 0, 0], [0, 1, 2, 3, 4, 5, 6]] 

但是为什么?我的意思是,我从未声明过“全局 a”。

奇怪的是,如果我这样做:

def foo(a): 
    a -= 1 
a = 2 
foo(a) 
print(a) 

为什么会这样

2 

我不明白其中的区别:/

请您参考如下方法:

您的函数定义有问题。您正在向两个函数传递一个参数,因此无需首先声明任何全局内容。如果您要从定义中删除参数,这个问题会更有意义一些。

这里的全部混淆在于 python 中数据类型的可变性。列表和字典是可变容器,这意味着它们的值可以随时更改。其他数据类型,如整数、 float 、元组等是不可变的。你无法改变它们。您可以创建新的,例如 1 + 1 将返回一个新的整数 2。

在您的第一个示例中,您正在修改列表的内容。列表是可变容器,这意味着它们的内容可以改变。如果您碰巧在全局范围内有 a,那么同一范围内的函数可以修改列表的内容。

def foo(): 
    """ Notice i've removed the argument `a` from the function def, to illustrate my point.. """ 
    for i in range(a[0].__len__()): 
        a[0][i] -= a[1][i] 
>>> a = [[0,1,2,3,4,5,6],[0,1,2,3,4,5,6]] 
>>> foo() 
>>> print(a) 
[[0, 0, 0, 0, 0, 0, 0], [0, 1, 2, 3, 4, 5, 6]] 

在您的第二个示例中,您正在修改一个整数。整数是不可变的数据类型,不能修改。以下将在函数foo() 的局部范围内修改变量a(通过创建一个新的整数)但是因为您还没有定义a 全局或返回局部a,没有可见的变化。

def foo(a): 
    a -= 1 
>>> a = 2 
>>> foo(a) 
>>> print(a) 
2