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