python 全域變數的理解(global關鍵字)

來源:互聯網
上載者:User

標籤: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關鍵字)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.