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

相關文章
相關標籤/搜索