0

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

4

1 回答 1

3

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

更新:但是,请注意,如果来自其他编程语言,“更改值”可能会或可能不会意味着您最终习惯的内容,因为 Python 中的赋值意味着给对象一个名称。关键字global允许您让给定名称指向(关联)不同的对象。看下面的例子:

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

会导致:

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

  • bbin中的名称test()未声明为全局名称,因此赋值bb = -1 将在函数内本地创建名称bb并将其指向-1,同时将名称留bb全局范围内仍指向值2

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

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

于 2013-02-25T19:32:10.723 回答