python中list做为全局变量无需global声明的缘由

发现一个问题。python

python中list变量做为全局变量时,在函数中能够直接修改。函数

而普通变量则须要先在函数中global声明,不然会报错。spa

例如:.net

a = 1code

def fun():htm

  global ablog

  a = 2get

而list:it

b = [1,2]class

def fun():

  b[0] = 2

在函数中直接修改list则是能够的。

缘由是:

普通变量若是在函数中赋值

a = 2

会有歧义。由于它既能够是表示引用全局变量a,也能够是建立一个新的局部变量,因此在python中,默认它的行为是建立局部变量,除非显式声明global。

而对列表list变量进行赋值

b[0] = 2

则不会有歧义。它是“明确的”,由于若是把b看成是局部变量的话,它会报KeyError,因此它只能是引用全局的b,故不须要画蛇添足显式声明global。

参考自:

实例讲解Python中global语句下全局变量的值的修改

 
Freecode# : www.cnblogs.com/yym2013

相关文章
相关标签/搜索