2011-04-03 136 views
12
def say_boo_twice(): 
    global boo 
    boo = 'Boo!' 
    print boo, boo 

boo = 'boo boo' 
say_boo_twice() 

輸出是Python的全局變量

噓!噓!

不符合我的預期。自從我宣佈boo全球,爲什麼不輸出:

布布布布

+3

全局變量是可怕的。 – intuited 2011-04-03 22:28:21

+1

這是預期的輸出。你指定boo,然後你打印兩次。 – 2014-05-22 02:15:09

+0

這是一個令人困惑的例子。爲什麼不改變這些數值而不是爲「boo boo」「說兩遍」?渾思。 – dcsan 2017-07-08 21:29:35

回答

24

你已經改變boo你的函數裏面,爲什麼不改變它?而且,全局變量很糟糕。

+8

+1提到全球定義管理的恐怖。 – Kayla 2011-04-03 22:16:23

+0

謝謝。我知道了。 – 2011-04-03 22:19:09

+2

而不是使用全局變量,有什麼更好的方法來處理跨功能使用的變量? – 2012-07-24 15:19:36

5

將聲明爲全局聲明後,您正在重新分配boo,因此該值是您分配給它的最後一個值。如果你刪除了第三行,你會得到你期望的輸出。

17

因爲您事先重新分配。註釋掉boo = 'Boo!',你會得到你所描述的。

def say_boo_twice(): 
    global boo 
    #boo = 'Boo!' 
    print boo, boo 

boo = 'boo boo' 
say_boo_twice() 

也是global boo是不必要的,boo已經在全球範圍內。 這就是global有差別

def say_boo_twice(): 
    global boo 
    boo = 'Boo!' 
    print boo, boo 

say_boo_twice() 
print "outside the function: " + boo #works 

鑑於:

def say_boo_twice(): 
    #global boo 
    boo = 'Boo!' 
    print boo, boo 

say_boo_twice() 
print "outside the function: " + boo # ERROR. boo is only known inside function, not to this scope 
3

當你調用該函數本質上重新分配噓聲。

檢查如何使用globals()和locals()函數。

0

之前給我希望你能理解在python全局和局部變量之間的區別爲例

全局變量:這是專門針對當前模塊

局部變量:這是專門針對當前函數或方法,因爲我們稱之爲python

如果本地變量和當前變量都具有相同的名稱boo會怎麼樣?

在這種情況下,如果你不相同的方法定義變噓聲爲全球或功能默認情況下將使用它作爲局部變量

來到你的代碼

您已經在您的方法中將boo定義爲全局say_boo_twice()。 當你嘗試初始化的時候,這個問題是boo ='Boo!「在該方法中,你實際上是覆蓋你的噓=先前初始化‘布布’

試試這個代碼

- 我還沒有初始化方法裏面變量噓say_boo_twice()

def say_boo_twice():  
    global boo 
    print boo, boo 

boo = 'boo boo'  
say_boo_twice() 

所有最好的! ! !

0

全局boo僅在全局內部方法say_boo_twice中並且已在此方法內重新分配了一個值。你需要理解詞彙或範圍,它可以是全球性的,也可以是你想要的。在這種情況下,就在印刷之前,它被賦予了一個'Boo!'的值。這就是它正確打印的內容。