久久国产乱子伦精品免费M,亚洲一区二区三区91,欧美国产在线视频,国产精品视频久久

自學(xué)Python教程【第六十九節(jié)】變量的作用域

歡迎大家來到自學(xué)Python教程教室,上一講我們學(xué)習(xí)Python的另外一個(gè)知識點(diǎn)lambda 表達(dá)式,這節(jié)課我們學(xué)習(xí)Python中變量的作用域的相關(guān)知識,來看看吧:

在寫代碼的時(shí)候,免不了要使用變量。但程序中的一個(gè)變量并不一定是在哪里都可以被使用,根據(jù)情況不同,會(huì)有不同的“有效范圍”。看這樣一段代碼:

def func(x):

print 'X in the beginning of func(x): ', x

x = 2

print 'X in the end of func(x): ', x

x = 50

func(x)

print 'X after calling func(x): ', x

輸出:

X in the beginning of func(x): 50

X in the end of func(x): 2

X after calling func(x): 50

變量 x 在函數(shù)內(nèi)部被重新賦值。但在調(diào)用了函數(shù)之后,x 的值仍然是50。為什么?

這就得說一下變量的“作用域”:

當(dāng)函數(shù)內(nèi)部定義了一個(gè)變量,無論是作為函數(shù)的形參,或是另外定義的變量,它都只在這個(gè)函數(shù)的內(nèi)部起作用。函數(shù)外即使有和它名稱相同的變量,也沒有什么關(guān)聯(lián)。這個(gè)函數(shù)體就是這個(gè)變量的作用域。像這樣在函數(shù)內(nèi)部定義的變量被稱為“局部變量”。

要注意的是,作用域是從變量被定義的位置開始。像這樣的寫法是有問題的:

def func():

print y

y = 2

print y

報(bào)錯(cuò):

UnboundLocalError: local variable 'y' referenced before assignment

因?yàn)樵?y = 2 之前,y 并不存在,調(diào)用 y 的值就會(huì)出錯(cuò)。

回到開始那個(gè)例子:

在函數(shù) func 外部,定義的變量 x,賦值為 50,作為參數(shù)傳給了函數(shù) func。而在函數(shù) func 內(nèi)部,變量 x 是形參,它的作用域是整個(gè)函數(shù)體內(nèi)部。它與外面的那個(gè) x 沒有關(guān)系。只不過它的初始值是由外面那個(gè) x 傳遞過來的。

所以,雖然函數(shù)體內(nèi)部的 x 被重新賦值為 2,也不會(huì)影響外面那個(gè) x 的值。

不過有時(shí)候,我們希望能夠在函數(shù)內(nèi)部去改變一些變量的值,并且這些變量在函數(shù)外部同樣被使用到。怎么辦?

一種方法是,用 return 把改變后的變量值作為函數(shù)返回值傳遞出來,賦值給對應(yīng)的變量。比如開始的那個(gè)例子,可以在函數(shù)結(jié)尾加上

return x

然后把調(diào)用改為

x = func(x)

還有一種方法,就是使用“全局變量”。

在 Python 的函數(shù)定義中,可以給變量名前加上 global 關(guān)鍵字,這樣其作用域就不再局限在函數(shù)塊中,而是全局的作用域。

通過 global 改寫開始的例子:

def func():

global x

print 'X in the beginning of func(x): ', x

x = 2

print 'X in the end of func(x): ', x

x = 50

func()

print 'X after calling func(x): ', x

輸出:

X in the beginning of func(x): 50

X in the end of func(x): 2

X after calling func(x): 2

函數(shù) func 不再提供參數(shù)調(diào)用。而是通過 global x 告訴程序:這個(gè) x 是一個(gè)全局變量。于是函數(shù)中的 x 和外部的 x 就成為了同一個(gè)變量。這一次,當(dāng) x 在函數(shù) func 內(nèi)部被重新賦值后,外部的 x 也隨之改變。

前面講的局部變量和全局變量是 Python 中函數(shù)作用域最基本的情況。實(shí)際上,還有一些略復(fù)雜的情況,比如:

def func():

print 'X in the beginning of func(x): ', x

# x = 2

print 'X in the end of func(x): ', x

x = 50

func()

print 'X after calling func(x): ', x

輸出:

X in the beginning of func(x): 50

X in the end of func(x): 50

X after calling func(x): 50

程序可以正常運(yùn)行。雖然沒有指明 global,函數(shù)內(nèi)部還是使用到了外部定義的變量。然而一旦加上

x = 2

這句,程序就會(huì)報(bào)錯(cuò)。因?yàn)檫@時(shí)候,x 成為一個(gè)局部變量,它的作用域從定義處開始,到函數(shù)體末尾結(jié)束。

建議在寫代碼的過程中,顯式地通過 global 來使用全局變量,避免在函數(shù)中直接使用外部變量。

恭喜您在Python自學(xué)的道路上又堅(jiān)持了一天,今天我們學(xué)習(xí)了Python中變量的作用域的相關(guān)內(nèi)容,下節(jié)課我們將分享更多Python中的相關(guān)內(nèi)容,敬請關(guān)注 !

好啦!今天的分享到這里就結(jié)束了,希望大家能夠持續(xù)關(guān)注馬哥教育官網(wǎng)!每天都會(huì)有大量優(yōu)質(zhì)內(nèi)容與大家分享!

聲明:文章來源于網(wǎng)絡(luò),侵刪!

相關(guān)新聞

歷經(jīng)多年發(fā)展,已成為國內(nèi)好評如潮的Linux云計(jì)算運(yùn)維、SRE、Devops、網(wǎng)絡(luò)安全、云原生、Go、Python開發(fā)專業(yè)人才培訓(xùn)機(jī)構(gòu)!

    1. 主站蜘蛛池模板: 洛南县| 汉川市| 桐城市| 嘉黎县| 昔阳县| 无锡市| 芜湖县| 大石桥市| 望江县| 玉门市| 甘洛县| 绥化市| 玛纳斯县| 全南县| 屏边| 潮州市| 民丰县| 台北县| 武平县| 贞丰县| 桃园县| 兴城市| 东丰县| 龙游县| 孝感市| 将乐县| 克山县| 宁晋县| 油尖旺区| 聂拉木县| 南雄市| 嵊泗县| 波密县| 太仓市| 喜德县| 寻甸| 阿荣旗| 湖北省| 隆林| 鄂温| 徐水县|