在本文中,您將了解Python全局變量、局部變量、非局部變量以及在何處使用它們。
在Python中,在函數(shù)外部或全局范圍內(nèi)聲明的變量稱為全局變量。這意味著可以在函數(shù)內(nèi)部或外部訪問全局變量。
讓我們看一下如何在Python中創(chuàng)建全局變量的示例。
x = "global" def foo(): print("內(nèi)部 x:", x) foo() print("外部 x:", x)
當(dāng)我們運(yùn)行代碼時,將輸出:
內(nèi)部 x: global 外部 x: global
在上面的代碼中,我們將x創(chuàng)建為全局變量,并定義了foo()來打印全局變量x。最后,我們調(diào)用foo()將打印x值的。
如果要在函數(shù)內(nèi)更改x的值怎么辦?
x = "global" def foo(): x = x * 2 print(x) foo()
當(dāng)我們運(yùn)行代碼時,將輸出:
UnboundLocalError: local variable 'x' referenced before assignment
輸出顯示了一個錯誤,因?yàn)镻ython將x視為一個局部變量,并且x也沒有在foo()中定義。
為了實(shí)現(xiàn)這個功能,我們使用了全局關(guān)鍵字。要了解更多信息,請訪問Python全局關(guān)鍵字。
在函數(shù)體內(nèi)或局部范圍內(nèi)聲明的變量稱為局部變量。
def foo(): y = "local" foo() print(y)
當(dāng)我們運(yùn)行代碼時,將輸出:
NameError: name 'y' is not defined
輸出顯示一個錯誤,因?yàn)槲覀冊噲D在全局范圍內(nèi)訪問一個局部變量y,而局部變量只在foo()或局部范圍內(nèi)工作。
讓我們看一個有關(guān)如何在Python中創(chuàng)建局部變量的示例。
通常,我們在函數(shù)內(nèi)部聲明一個變量以創(chuàng)建局部變量。
def foo(): y = "local" print(y) foo()
當(dāng)我們運(yùn)行代碼時,它將輸出:
local
讓我們看一下前面的問題,其中x是一個全局變量,我們想在foo()內(nèi)部修改x。
在這里,我們將展示如何在同一代碼中使用全局變量和局部變量。
x = "global" def foo(): global x y = "local" x = x * 2 print(x) print(y) foo()
當(dāng)我們運(yùn)行代碼時,將輸出:
global global local
在上面的代碼中,我們將x聲明為全局變量,將y聲明為foo()中的局部變量。然后,我們使用乘法運(yùn)算符*來修改全局變量x,并同時輸出x和y。
在調(diào)用foo()之后,x的值就變成了global global,因?yàn)槲覀兪褂脁 * 2來打印兩次global。然后,我們打印局部變量y的值,即局部變量。
x = 5 def foo(): x = 10 print("local x:", x) foo() print("global x:", x)
當(dāng)我們運(yùn)行代碼時,將輸出:
local x: 10 global x: 5
在上面的代碼中,我們對全局變量和局部變量使用了相同的名稱x。當(dāng)我們打印相同的變量時,會得到不同的結(jié)果,因?yàn)樽兞渴窃趦蓚€作用域中聲明的,即foo()內(nèi)的局部作用域和foo()外的全局作用域。
當(dāng)我們在foo()中打印變量時,它輸出的是local x: 10。這稱為變量的局部作用域。
同樣,當(dāng)我們在foo()外部打印變量時,它會輸出global x: 5。這稱為變量的全局范圍。
非局部變量用于未定義局部作用域的嵌套函數(shù)。這意味著該變量既不能在局部范圍內(nèi),也不能在全局范圍內(nèi)。
讓我們看一下如何在Python中創(chuàng)建全局變量的示例。
我們使用nonlocal關(guān)鍵字創(chuàng)建非局部變量。
def outer(): x = "local" def inner(): nonlocal x x = "nonlocal" print("inner:", x) inner() print("outer:", x) outer()
當(dāng)我們運(yùn)行代碼時,將輸出:
inner: nonlocal outer: nonlocal
在上面的代碼中,有一個嵌套函數(shù)inner()。 我們使用nonlocal關(guān)鍵字創(chuàng)建一個非局部變量。 inner()函數(shù)在另一個函數(shù)external()的范圍內(nèi)定義。
注意:如果我們改變了非局部變量的值,這些改變就會出現(xiàn)在局部變量中。