我只是想知道,在python 3中,为什么一些全局变量必须被定义为global
你使用的每个单一函数(你正在定义),但其他变量只需要定义一次?可能是一个问题因为我没有正确理解范围,请有人可以解释一下吗?
答案 0 :(得分: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
会导致全局{ em>将aa
命名为新对象,即整数-1
。
bb
中的test()
名称未声明为全局,因此作业bb = -1
将在函数中本地创建名称bb
并将其指向-1
,同时将全局范围内的名称bb
仍指向值{{ 1}}。
变量2
也未声明为全局变量,因此,您无法在函数{{1}中更改全局 cc
的关联}。但是,由于在全局范围cc
与可变对象关联,因此您可以在函数中更改此对象的内容。
请注意,这里的公式可能不是解释差异的官方Python方式,但如果您有其他编程语言的背景知识,它可能有助于理解。