1. 程式人生 > >python基礎--局部變量與全局變量

python基礎--局部變量與全局變量

打印 引用 width inf print .com oat sel 數值

  首先來看兩張圖,局部變量與全局變量的區別:  

技術分享圖片技術分享圖片

  局部變量:

  

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=1111
class
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 _n ret=MyClass() print(ret.b())

運行的結果:

b中的n數值為:2222
1111

如果修改n=_n+1111為_n=_n+1111,那麽全局變量也會隨之改變,示例代碼如下:

_n=1111
class
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 _n ret=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=1111
class 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 _n
ret=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基礎--局部變量與全局變量