Defining Global Variables
本问题已经有最佳答案,请猛点这里访问。
我只是想知道,在python 3中,为什么必须将一些全局变量定义为
作用域中的变量可以被该作用域中声明的函数/对象读取,但不能修改。如果您还希望更改它们的值,则必须将它们声明为全局。
更新:但是,请注意,"更改值"可能意味着,也可能不意味着,如果与其他编程语言混合,最终会使用什么,因为在python中的赋值意味着为对象命名。关键字
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方法,但是如果您有其他编程语言的一些背景,它可能有助于理解一些事情。