Python作用域 全局|局部|global


在使用變量的時候,有時候會發生變量引用錯誤,或者程序運行完,程序得到的結果與預期存在差別。

記住一條原則:任何變量在使用前,都必須確保“變量引用是否明確”!

  • 全局變量:作用域是整個腳本,除非被刪除掉,否則他們存活到腳本結束,且對於所有函數,他們的值是可以被訪問的。
  • 局部變量:作用域侷限在定義的函數,依賴於函數現階段是否處於活動。當函數被調用時,局部變量進入聲明它們的作用域。一旦函數完成,變量將會離開其作用域。

我們來看一些例子:
(1)局部變量
函數內部的變量名如果第一次出現,且出現在“=”左邊,即被視爲定義一個局部變量。不管全局域中有沒有用到該變量名,函數中使用的將是局部變量。

clipboard.png

ps:此處會報錯。因爲num首先被當成了一個局部變量,到等號右側後發現這個變量還沒賦值就被用於計算,於是報錯。
Num += 100:這句話是有歧義的,num既可以表示引用全局變量,也可以是創建一個新的局部變量。
Python中,默認創建局部變量並使用它,除非顯式聲明global

(2)函數內部使用全局變量

clipboard.png

此時num2引用的是全局變量中的num2。此處是明確的,因爲把num2當做一個局部變量的話,會報錯,只能是全局的num2,故不需要聲明global

(3)函數內部修改全局變量
在函數中,如果想使用並修改到全局變量,則需要使用到global

clipboard.png

(4)錯誤使用global

  • if __name__ == ‘__main__’:中使用global

clipboard.png

最好的直接解決這個問題的方法是把global聲明從 if __name__==’__main__’: 中刪除,在這裏是不需要聲明global的。
因爲與其他語言不同,Python中的if語句不會再引入一個新的作用域(scope),任何變量分配的都是全局變量(global)。作爲一個全局變量,在使用變量名之前是不允許再一次聲明爲全局變量。
if __name__==’__main__’: 中的變量都是全局的,所以在main中間再一次聲明global是錯誤的,所以系統會發出警告。


❤ thanks for watching, keep on updating...
點個贊再走吧

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章