Python做用域 全局|局部|global


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

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

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

咱們來看一些例子:
(1)局部變量
函數內部的變量名若是第一次出現,且出如今「=」左邊,即被視爲定義一個局部變量。無論全局域中有沒有用到該變量名,函數中使用的將是局部變量。code

clipboard.png

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

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

clipboard.png

此時num2引用的是全局變量中的num2。此處是明確的,由於把num2當作一個局部變量的話,會報錯,只能是全局的num2,故不須要聲明globalit

(3)函數內部修改全局變量
在函數中,若是想使用並修改到全局變量,則須要使用到global class

clipboard.png

(4)錯誤使用global變量

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

clipboard.png

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


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

相關文章
相關標籤/搜索