標籤:引用 gpo oat 直接 報錯 就會 lob 全域變數 使用
首先來看兩張圖,局部變數與全域變數的區別:
局部變數:
class MyClass(): def a(self): n=100 print(‘a中的n數值為:%d‘%(n)) def b(self): n=n+200 print(‘b中的n數值為:%d‘%(n))
這個時候就會報錯,函數b中的n=n+200會顯示n未定義錯誤,原因是n只是在函數a中定義了一個值100,但是函數b中並未賦值,如果還是要使用n這個數值,就可以定義一個全域變數,表示區分我這裡寫成_n
全域變數:
_n=1111class MyClass(): def a(self): n=100 print(‘a中的n數值為:%d‘%(n)) def b(self): global _n n=_n+1111 print(‘b中的n數值為:%d‘%(n)) return _nret=MyClass()print(ret.b())
啟動並執行結果:
b中的n數值為:2222
1111
如果修改n=_n+1111為_n=_n+1111,那麼全域變數也會隨之改變,範例程式碼如下:
_n=1111class MyClass(): def a(self): n=100 print(‘a中的n數值為:%d‘%(n)) return _n def b(self): global _n _n=_n+1111 print(‘b中的n數值為:%d‘%(_n)) return _nret=MyClass()print(ret.b())print(ret.a())
運行結果:
b中的n數值為:2222
2222
a中的n數值為:100
2222
這裡可以看見,在調用b函數後,已經對全域變數_n進行了修改,變成了2222,再接下來調用a函數的時候,傳回值return _n是已經被b函數修改後的全域變數_n,數值是2222。
如果再次調用b函數,數值將會變成3333,因為全域變數_n在2222的基礎上又一次被b函數+1111。
代碼如下:
_n=1111class MyClass(): def a(self): n=100 print(‘a中的n數值為:%d‘%(n)) return _n def b(self): global _n _n=_n+1111 print(‘b中的n數值為:%d‘%(_n)) return _nret=MyClass()print(ret.b())print(ret.b())print(ret.b())print(ret.a())
運行結果:
b中的n數值為:2222
2222
b中的n數值為:3333
3333
b中的n數值為:4444
4444
a中的n數值為:100
4444
當然,如果你看著列印結果後面跟著把函數傳回值也列印了很不舒服,也可以直接寫成ret.b(),不需要print,這樣就只會列印:b中的n數值為:2222,而不會把傳回值2222跟在後面列印出來
ps:值得注意的是,引用全域變數保留字global一般不要省略不寫,否則有時候會產生不正常的結果。
python基礎--局部變數與全域變數