2013-02-25 179 views
0

我只是想知道,在Python 3,爲什麼有的全局變量必須被定義爲global您使用(即我們定義的)每燎功能,但其他人只需要定義一次?可能是一個問題,因爲我沒有正確地理解範圍,請問有人可以解釋一下嗎?定義全局變量

回答

3

範圍內的變量可以是讀取,但不能在該範圍內聲明的函數/對象修改。如果你也想改變它們的價值,你必須宣佈它們是全球性的。

UPDATE:但是,請注意,「改變價值」可能會或可能並不意味着什麼,你最終會用於如果來自其他編程語言正在添加,如分配在Python意味着給一個對象的名稱。關鍵字global允許你讓定指向(被關聯到)不同的對象。請看下面的例子:

aa = 1 
bb = 2 
cc = [ 1, 2, 3 ] 

def test(): 
    global aa 
    aa = -1 
    bb = -1 
    cc[2] = -1 

test() 
print "aa:", aa 
print "bb:", bb 
print "cc:", cc 

會導致:

aa: -1 
bb: 2 
cc: [1, 2, -1] 
  • 在名稱aa聲明爲global功能test(),在功能,所以aa = -1將導致點全球名稱aa爲一個新對象,即整數-1

  • 名稱bbtest()未聲明爲全球性的,因此分配bb = -1 將函數內本地創建的名稱bb,並將其指向-1,而在全球範圍仍然指向留下名字bb值爲2

  • 可變cc也沒有宣佈爲全球性的,因此,你不能改變的功能test()全球cc的關聯。然而,由於在全球範圍內cc可變對象關聯,你可以改變這個對象的功能中的內容。

注意,這裏的配方是也許不是解釋的差異官方Python的方式,但它可能有助於瞭解的東西,如果你有其他編程語言的一些背景。

+0

注意,這個正確的解釋,完全依賴於「改變一個變量的值」的正確解釋。歷史表明,初學者經常會弄錯那部分。 – delnan 2013-02-25 19:34:23

+0

我同意,因此,我發現你在上面鏈接的線程是澄清細節(關於可變的不可變類型)的一個非常好的起點。 – 2013-02-25 19:37:12

+0

你提到可變和不可變類型,就好像有區別一樣,聽起來就像你不明白它。 – delnan 2013-02-25 19:40:30