成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Python3 關(guān)鍵字nonlocal和global的用法與區(qū)別

PumpkinDylan / 3888人閱讀

摘要:關(guān)鍵字在中,閉包只能讀外部函數(shù)的變量,而不能改寫它。注意關(guān)鍵字是中出現(xiàn)的所以在中無(wú)法直接使用關(guān)鍵字里只有種作用域全局作用域和局部作用域。兩者使用的范圍不同。

關(guān)鍵字nonlocal

在Python 2.x中,閉包只能讀外部函數(shù)的變量,而不能改寫它。為了解決這個(gè)問題,Python 3.x引入了nonlocal關(guān)鍵字,在閉包內(nèi)用nonlocal聲明變量,就可以讓解釋器在外層函數(shù)中查找變量名。

注意:關(guān)鍵字nonlocal:是python3.X中出現(xiàn)的,所以在python2.x中無(wú)法直接使用.
關(guān)鍵字global

Python里只有2種作用域:全局作用域和局部作用域。全局作用域是指當(dāng)前代碼所在模塊的作用域,局部作用域是指當(dāng)前函數(shù)或方法所在的作用域。局部作用域里的代碼可以讀外部作用域(包括全局作用域)里的變量,但不能更改它。如果想更改它,這里就要使用global關(guān)鍵字了

實(shí)例

關(guān)鍵字nonlocal的作用與關(guān)鍵字global類似,使用nonlocal關(guān)鍵字可以在一個(gè)嵌套的函數(shù)中修改嵌套作用域中的變量。
看兩個(gè)例子
實(shí)例1

1
2
3
4
5
6
name = "pythontab"
def func()

global name
name = "pythontab.com"

func()
print(name)

結(jié)果:
1
pythontab.com

實(shí)例2

1
2
3
4
5
6
7
8
def func():

name = "pythontab"
def foo():
    nonlocal name
    name = "pythontab.com"
foo()
print(name)

func()

結(jié)果:
1
pythontab.com

注意看, 實(shí)例2中并沒有使用global關(guān)鍵字而改變了name的值。

總結(jié)

主要區(qū)別有以下兩點(diǎn):

兩者的功能不同。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ò)誤(見1)。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/43306.html

相關(guān)文章

  • 理解 Python LEGB

    摘要:理解的名字空間的名字空間是一個(gè)非常核心的內(nèi)容。在中提供了一個(gè)關(guān)鍵字來(lái)修改外部嵌套函數(shù)的名字空間,但是要使用才有,我等使用的只能眼饞一下。 理解 Python 的 LEGB 名字空間 Python 的名字空間是 Python 一個(gè)非常核心的內(nèi)容。 其他語(yǔ)言中如 C 中,變量名是內(nèi)存地址的別名,而在 Python 中,名字是一個(gè)字符串對(duì)象,它與他指向的對(duì)象構(gòu)成一個(gè){name:obje...

    FrozenMap 評(píng)論0 收藏0
  • python中globalnonlocal

    摘要:聲明這篇文章很大程度上借鑒了。作用域僅限于函數(shù)中,從函數(shù)外是訪問不到的。變量在源文件中非函數(shù)或類聲明的變量默認(rèn)是變量。正確的做法應(yīng)該是變量是引入的,只能用于嵌套函數(shù)中。在嵌套函數(shù)中使用聲明變量,可以修改外層函數(shù)中的變量。 聲明: 這篇文章很大程度上借鑒了Global, Local and nonlocal Variables。 local變量 與其它的編程語(yǔ)言相同,在函數(shù)中聲明的變量...

    gyl_coder 評(píng)論0 收藏0
  • Django Web開發(fā)技術(shù)棧清單-Python基礎(chǔ)篇

    摘要:使用單引號(hào)雙引號(hào)和三引號(hào)或來(lái)表示字符串。不可變的集合函數(shù)會(huì)以字典類型返回當(dāng)前位置的全部全局變量。用于將進(jìn)制整數(shù)轉(zhuǎn)換成進(jìn)制,以字符串形式表示。返回字符串中最大的字母,或數(shù)組中的最大值。的作用就是減少了單行函數(shù)的定義。 問題答案由本人整理 1.基礎(chǔ)語(yǔ)法是否熟悉?介紹一下 Python和其他語(yǔ)言最大的區(qū)別就是使用行和縮進(jìn),而不是大括號(hào)({})或者分號(hào)(;)來(lái)控制類、函數(shù)或者邏輯判斷。Pyt...

    leeon 評(píng)論0 收藏0
  • Python入門-函數(shù)

    摘要:函數(shù)返回值支持多個(gè),返回多個(gè)時(shí),使用逗號(hào)分隔。如上,與這個(gè)參數(shù)按照由左到右依次賦值給形參和供函數(shù)內(nèi)部使用。在傳入函數(shù)時(shí),便是將這個(gè)引用傳入了函數(shù)。需要使用關(guān)鍵字聲明將變量作用域變?yōu)楹瘮?shù)外部非全局變量,及閉包作用域。 < 返回索引頁(yè) 函數(shù) 函數(shù)定義 返回值 函數(shù)的調(diào)用 函數(shù)的參數(shù) 順序參數(shù) 參數(shù)的默認(rèn)值 可變參數(shù) 關(guān)鍵字參數(shù) 參數(shù)的組合 參數(shù)的專遞 函數(shù)作用域 內(nèi)建...

    genefy 評(píng)論0 收藏0
  • Python學(xué)習(xí)之路26-函數(shù)裝飾器閉包

    摘要:初步認(rèn)識(shí)裝飾器函數(shù)裝飾器用于在源代碼中標(biāo)記函數(shù),以某種方式增強(qiáng)函數(shù)的行為。函數(shù)裝飾器在導(dǎo)入模塊時(shí)立即執(zhí)行,而被裝飾的函數(shù)只在明確調(diào)用時(shí)運(yùn)行。只有涉及嵌套函數(shù)時(shí)才有閉包問題。如果想保留函數(shù)原本的屬性,可以使用標(biāo)準(zhǔn)庫(kù)中的裝飾器。 《流暢的Python》筆記本篇將從最簡(jiǎn)單的裝飾器開始,逐漸深入到閉包的概念,然后實(shí)現(xiàn)參數(shù)化裝飾器,最后介紹標(biāo)準(zhǔn)庫(kù)中常用的裝飾器。 1. 初步認(rèn)識(shí)裝飾器 函數(shù)裝飾...

    sunny5541 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<