关于python:定义全局变量

Defining Global Variables

本问题已经有最佳答案,请猛点这里访问。

我只是想知道,在python 3中,为什么必须将一些全局变量定义为global,您使用的每个函数(您定义的)都要定义,而其他变量只需要定义一次?可能是个问题,因为我对范围没有很好的理解,有人能开灯吗?


作用域中的变量可以被该作用域中声明的函数/对象读取,但不能修改。如果您还希望更改它们的值,则必须将它们声明为全局。

更新:但是,请注意,"更改值"可能意味着,也可能不意味着,如果与其他编程语言混合,最终会使用什么,因为在python中的赋值意味着为对象命名。关键字global允许您让给定的名称指向(与)不同的对象。请看以下示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
aa = 1
bb = 2
cc = [ 1, 2, 3 ]

def test():
    global aa
    aa = -1
    bb = -1
    cc[2] = -1

test()
print"aa:", aa
print"bb:", bb
print"cc:", cc

会导致:

1
2
3
aa: -1
bb: 2
cc: [1, 2, -1]
  • 在函数test()中,名称aa声明为global,因此函数中的aa = -1会使全局名称aa指向一个新对象,即整数-1

  • test()中的名称bb不是全局的,因此分配bb = -1不是全局的。将在函数内本地创建名称bb,并将其指向-1,同时将名称bb留在全局范围内,仍然指向值2

  • 变量cc也没有声明为全局,因此,不能在函数test()中更改全局cc的关联。但是,由于在全局范围内,cc与可变对象相关联,因此可以在函数内更改此对象的内容。

注意,这里的公式可能不是解释差异的正式Python方法,但是如果您有其他编程语言的一些背景,它可能有助于理解一些事情。