国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python中關(guān)鍵字global和nonlocal的區(qū)別詳解

2020-02-15 22:53:24
字體:
供稿:網(wǎng)友

前言

終于下定決心學(xué)習(xí)Python了。既然從頭開始,就需要認(rèn)認(rèn)真真。

首先需要說的是,我是初學(xué)Python,這篇文章只是用于展示global和nonlocal關(guān)鍵字的區(qū)別,是很簡(jiǎn)單的知識(shí)點(diǎn),如果你已經(jīng)學(xué)過,可以繞道。因?yàn)椴唤?jīng)常寫博客,而且是個(gè)Python小白,所以內(nèi)容有些啰嗦。。。

兩個(gè)關(guān)鍵詞都用于允許在一個(gè)局部作用域中使用外層的變量。

global 表示將變量聲明為全局變量 nonlocal 表示將變量聲明為外層變量(外層函數(shù)的局部變量,而且不能是全局變量)

注意:我使用的是Python3.6.3,可能和Python2有不同的地方,并未確認(rèn)。

考慮到文章比較啰嗦,先把結(jié)論貼出來,避免浪費(fèi)大家的時(shí)間:

第一,兩者的功能不同。global關(guān)鍵字修飾變量后標(biāo)識(shí)該變量是全局變量,對(duì)該變量進(jìn)行修改就是修改全局變量,而nonlocal關(guān)鍵字修飾變量后標(biāo)識(shí)該變量是上一級(jí)函數(shù)中的局部變量,如果上一級(jí)函數(shù)中不存在該局部變量,nonlocal位置會(huì)發(fā)生錯(cuò)誤(最上層的函數(shù)使用nonlocal修飾變量必定會(huì)報(bào)錯(cuò))。

第二,兩者使用的范圍不同。global關(guān)鍵字可以用在任何地方,包括最上層函數(shù)中和嵌套函數(shù)中,即使之前未定義該變量,global修飾后也可以直接使用,而nonlocal關(guān)鍵字只能用于嵌套函數(shù)中,并且外層函數(shù)中定義了相應(yīng)的局部變量,否則會(huì)發(fā)生錯(cuò)誤(見第一)。

接下來是得到結(jié)論的過程,有興趣的可以瀏覽一下。

我們先來看一個(gè)代碼片段,看看默認(rèn)情況下輸出結(jié)果是什么(不敢恭維CSDN顯示代碼的格式,這里使用圖片,如果要驗(yàn)證,得麻煩各位動(dòng)動(dòng)指頭了)。

輸出結(jié)果:

上面的代碼片段中沒有使用global或nonlocal關(guān)鍵字,是為了看一下默認(rèn)情況下的輸出結(jié)果。

可以看到變量x在三次輸出中是同一個(gè)變量(值相同,地址也相同),都是全局變量,在print函數(shù)中使用三個(gè)參數(shù)是為了方便識(shí)別變量,第一個(gè)參數(shù)是print運(yùn)行的位置,第二個(gè)參數(shù)是變量x保存的值,第三個(gè)參數(shù)是變量x保存的值的地址(這個(gè)有待考證)。

如果我們?cè)趂unc函數(shù)中修改x的值呢?

輸出結(jié)果:

可以看到func函數(shù)中x的值和地址都變了,但沒有影響函數(shù)外邊的x的值和地址(main1和main2的數(shù)據(jù)相同)。所以func函數(shù)內(nèi)的x變量和函數(shù)外的x變量是兩個(gè)變量,而func內(nèi)的x變量是局部變量,修改它的值不影響全局變量。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 科技| 顺平县| 本溪市| 兰西县| 樟树市| 白河县| 岱山县| 乌恰县| 汉川市| 彭阳县| 休宁县| 阿拉善盟| 阆中市| 吴忠市| 栾川县| 岱山县| 阜康市| 丹阳市| 芷江| 敦煌市| 东光县| 镇原县| 青州市| 黎平县| 苏尼特右旗| 威宁| 吉木萨尔县| 荆州市| 蒲城县| 措勤县| 淳安县| 龙江县| 调兵山市| 沙河市| 南木林县| 上高县| 辉县市| 宁津县| 三台县| 留坝县| 禹城市|