定义全局变量

时间:2013-02-25 19:30:06

标签: python scope global-variables

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

1 个答案:

答案 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会导致全局aa命名为新对象,即整数-1

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

  • 变量2也未声明为全局变量,因此,您无法在函数{{1}中更改全局 cc的关联}。但是,由于在全局范围cc可变对象关联,因此您可以在函数中更改此对象的内容。

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