|
先来看下面的代码及实行成果:- a = 1b = [2,3]def nums(): a = 2 b[0] = 0 print(a) print(b)print(a)print(b)nums()print(a)print(b)
复制代码 成果:对上面成果的分析:
函数 nums() 中重新界说了一个变量 a ,这个 a 是部分变量,与概况的全局变量没有关系,而全局变量 列表 b 间接被援用过来举行点窜了,一样是全局变量为什么会有差别呢?
由于格式题目激发了歧义,容器典范的数据如,列表,字典,他们的点窜和建立钞缮格式全然差别,不会激发奇异,而数字,字符串典范变量的界说和点窜都是用 = 链接,激发了格式上的歧义,所以,当Python表白器碰到函数中的 “a = 2”这类格式时,不晓得是 “援用全局变量a点窜成2” 还是 “界说一个即是 2 的变量” ,从而激发歧义,为了确保全局变量对代码其他部分发生更小的影响,Python默以为第二种——重新界说一个变量,来禁止点窜全局变量对团体代码发生其他未知影响。
综上所述:
本质:格式激发的歧义题目
应用:对于字典,列表不会由于格式题目激发歧义的,不用管他;对于数字,字符串来说,当援用与建立发生歧义时,Python表白器默许建立新的变量,若不想建立,只是想点窜全局变量,必要加global声明,此外,假如只是纯真的援用全局变量,而不会发生歧义的,如 对于全局变量 a 来说,b = a + 5,这里只是纯真的利用,不会发生格式上的歧义题目,也不必要加global。
转自:https://www.cnblogs.com/Fruitzombie/p/8041115.html
免责声明:假如加害了您的权益,请联系站长,我们会实时删除侵权内容,感谢合作! |
|