2016-01-13 78 views
1
global name 
name = "Robert" 
def f(): 
    print name 
f() 
print name 

之間是什麼蟒蛇

name = "Robert" 
def f(): 
    print name 
f() 
print name 

如何這兩個片段之間的區分

+1

編寫代碼,請。 – tglaria

+0

好吧,現在區別在於:第一個代碼運行,第二個代碼與IndentationError一起崩潰。 – Kevin

+0

如果有錯誤,請更正這些@凱文 –

回答

1

global沒有聲明該變量是全局變量,它改變了函數查找被分配給變量的名稱的位置。
如果沒有global,則會在首次爲其分配值時創建局部變量。
隨着global,名稱在全球範圍內查找。如果分配給它時不存在,則它是全局創建的。
(如果您輸入錯字並意外創建新的全局變量,這可能會非常令人困惑。)

它在全局範圍內沒有任何效果,因爲所有內容都是全局的。
換句話說,你的兩段代碼是等價的。

這裏是做什麼的一個例子:

name = "foo" 

def f(): 
    name = "bar" 
    print "In f:", name 

def g(): 
    global name 
    name = "baz" 
    print "In g:", name 

def h(): 
    global mame 
    mame = "foobar" 
    print "In h:", mame 

print "Globally:", name 
f() 
print "Globally:", name 
g() 
print "Globally:", name 
h() 
print "Globally", name 
print "Globally", mame 

輸出:

Globally: foo 
In f: bar 
Globally: foo 
In g: baz 
Globally: baz 
In h: foobar 
Globally: baz 
Globally: foobar 
+0

是的,我明白了,但使用這些 –

2

對外宣稱的功能或類變量,是全球性的差別全局和intizilation功能外之間的差異(在模塊內)。

global可以在函數/類中使用,以便能夠在全局範圍內修改該變量。

1

在這種情況下沒有理由使用全局,並且兩段代碼之間沒有區別。

使用全局的原因是如果您重新分配函數中的變量;但即使如此,您仍然需要使用以內的全球,該功能不在外面。