python中list作為全局變量無需global聲明的原因


發現一個問題。

python中list變量作為全局變量時,在函數中可以直接修改。

而普通變量則需要先在函數中global聲明,否則會報錯。

例如:

a = 1

def fun():

  global a

  a = 2

而list:

b = [1,2]

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM