標籤:python 全域變數
先看代碼:
代碼一:
#!/usr/bin/python#coding:utf8x = 20 def test():print 'x= ',xtest()
代碼一執行結果:
x = 20
我們在代碼一的基礎上稍加修改
代碼二:
x = 20 def test():print 'x= ',xx = 2 print 'change x to ',xtest()
代碼二執行結果:
x=Traceback (most recent call last): File "D:\Demo\testGlobal.py", line 31, in <module> test() File "D:\Demo\testGlobal.py", line 27, in test print 'x= ',xUnboundLocalError: local variable 'x' referenced before assignment>>>
分析問題:我們在第4行給x試圖重新賦值為2,此時由於變數範圍的原因,函數體中的變數x和函數體外的變數x被認為不是同一個變數,那麼第三行的x因為沒有被賦值所以執行時就會報錯。
我們再對代碼二稍作修改
代碼三:
x = 20 def test():global x print 'x= ',xx = 2 print 'change x to ',xtest()
代碼三執行結果:
x= 20change x to 2>>>
此時的執行結果就符合我們的預期了。
結果分析,當加入global關鍵字以後,將x變數就設定成為了全域變數,也就是說無論函數體內或者函數體外都可以對這個變數進行操作(修改),但是所帶來的問題就是變數的安全性問題,如果多個使用者多該變數進行操作,最後變數的值就會變得不可預知。所以一般不建議使用全域變數。
全域變數的使用情境一般會出現在多線程中,一個線程開始對全域變數操作,此時先加互斥鎖,當線程操作完釋放以後其他線程才可以對該變數進行操作。此應用情境會再後續的部落格中詳細闡述。
python 全域變數的理解(global關鍵字)