我只是想知道,在 python 3 中,为什么必须将一些全局变量定义为global
您使用的每个单个函数(您正在定义),而其他变量只需要定义一次?可能是一个问题,因为我没有正确理解范围,请有人能说明一下吗?
问问题
178 次
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
。bb
in中的名称test()
未声明为全局名称,因此赋值bb = -1
将在函数内本地创建名称bb
并将其指向-1
,同时将名称留bb
在全局范围内仍指向值2
。变量
cc
也没有声明为全局变量,因此,您不能更改函数中全局 变量的关联。但是,由于在全局范围内关联了一个可变对象,因此您可以在函数内更改此对象的内容。cc
test()
cc
请注意,这里的公式可能不是解释差异的官方 Python 方式,但如果您有其他编程语言的背景,它可能有助于理解事物。
于 2013-02-25T19:32:10.723 回答