2017-09-12 14 views
-1

我已經編寫了一個簡單函數來理解Python中的本地和全局作用域。Python - 函數中的本地和全局作用域

x = 50 


def func(x): 
    print('x is', x) 
    x = 2 
    print('Changed local x to', x) 


func(x) 
print('x is still', x) 

什麼,我想在這裏理解爲x = 2分配期間在函數內部任何新的變量是越來越創建爲全局變量x仍持有價值50。這個過程如何在Python中發生?

+2

函數內的'x'與函數外的'x'是完全不同的變量。 – khelwood

+0

有趣的是,完全相同的代碼和一個非常類似的問題。這是作業還是書的一部分? – MSeifert

+0

@khelwood小心!他他給函數(通過參數)引用全局'x'。全局'x'仍然保持50的原因是因爲整數不可變......如果你使用'[50]'而不是你可以從函數內部操縱全局狀態... – Chris

回答

0

是的,一個新的變量被創建。 Python的作用域規則意味着不同作用域中相同名稱的變量是不相關的 - 變量引用總是包含具有該名稱的變量的最內層作用域,除非這被全局語句覆蓋。