Python中全局变量的引用与修改之格式影响

先来看下面的代码及执行结果:html

a = 1
b = [2,3]
def nums():
    a = 2
    b[0] = 0
    print(a)
    print(b)
print(a)
print(b)
nums()
print(a)
print(b)

结果:python

1
[2, 3]
2
[0, 3]
1
[0, 3]

对上面结果的分析:函数

函数 nums() 中从新定义了一个变量 a ,这个 a 是局部变量,与外面的全局变量没有关系,而全局变量 列表 b 直接被引用过来进行修改了,一样是全局变量为何会有差异呢?ui

  由于格式问题引起了歧义,容器类型的数据如,列表,字典,他们的修改和建立书写格式全然不一样,不会引起奇异,而数字,字符串类型变量的定义和修改都是用 = 连接,引起了格式上的歧义,因此,当Python解释器遇到函数中的 “a = 2”这种格式时,不知道是 “引用全局变量a修改成2” 仍是 “定义一个等于 2 的变量” ,从而引起歧义,为了确保全局变量对代码其余部分产生更小的影响,Python默认为第二种——从新定义一个变量,来避免修改全局变量对总体代码产生其余未知影响。code

综上所述:htm

本质:格式引起的歧义问题blog

运用:对于字典,列表不会由于格式问题引起歧义的,不用管他;对于数字,字符串来讲,当引用与建立发生歧义时,Python解释器默认建立新的变量,若不想建立,只是想修改全局变量,须要加global声明,另外,若是只是单纯的引用全局变量,而不会产生歧义的,如 对于全局变量 a 来讲,b = a + 5,这里只是单纯的使用,不会产生格式上的歧义问题,也不须要加global。字符串

转自:http://www.javashuo.com/article/p-bezfjpvp-eh.htmlget

相关文章
相关标签/搜索