2017-09-15 188 views
0

我有一個關於全局()Python中的問題全局()函數內部範圍

我的示例代碼

b=9 
def a1(): 
'kkk' 

a1() 
print globals() 

我輸出B作爲全球

由於B是全球性的,我我期待我可以在任何地方修改它 所以我修改我的代碼到

b=9 
def a1(): 
'kkk' 
b=100 
a1() 
print globals() 

仍然我的全局變量()表示b爲100.爲什麼函數內的b被當作本地值,而我的全局變量()表示它的全局變量?

注意:如果我在函數內部添加關鍵字global b,它將轉換爲全局。 我的問題是爲什麼b在函數內部沒有被修改,而globals()聲明b是全局的?

+0

你的問題不直接關於該錯誤,但它實際上是相同的:爲什麼變量分配給函數local? –

回答

2

請參閱Python docs以獲取更多信息。複製案例URL中的文本不起作用

在Python中,僅在函數中引用的變量隱式地爲全局變量。如果一個變量在函數體內的任何位置被賦值,它被認爲是一個局部變量,除非明確聲明爲全局變量。

雖然起初有點出人意料,但一時的考慮解釋了這一點。一方面,要求分配變量的全局值可以防止出現意想不到的副作用。另一方面,如果所有全局引用都需要全局,則您將始終使用全局。您必須聲明爲全局的每個對內置函數的引用或對導入模塊的一個組件。這種混亂將破壞全球聲明確定副作用的有效性。

1

裏面的一個函數,除非你使用關鍵字global,它不是被全局變量修改的。相反,創建局部變量並在其超出範圍時立即銷燬

1

至於你的代碼b是A1()的局部變量,使用全局變量,你應該先說給蟒蛇,然後用它,如下所示:

b=9 
def a1(): 
'kkk' 
global b 
b=100 

a1() 
print globals() 
+0

我的問題是爲什麼python報告b爲全局的,即使我沒有在函數內部使用關鍵字'global'? – syam

+0

您定義了'b'全局,這意味着它不在任何函數或類中,使用global關鍵字不定義全局,它將標記以前全局定義的變量用於要使用的函數 – Serjik