亚洲欧洲国产欧美一区精品,激情五月亚洲色五月,最新精品国偷自产在线婷婷,欧美婷婷丁香五月天社区

      python

      當(dāng)前位置:中華考試網(wǎng) >> python >> python編程基礎(chǔ) >> 文章內(nèi)容

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

      來(lái)源:中華考試網(wǎng)  [2020年9月27日]  【

        關(guān)鍵字nonlocal

        在Python 2.x中,閉包只能讀外部函數(shù)的變量,而不能改寫它。為了解決這個(gè)問(wèn)題,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

        name = 'pythontab'

        def func()

        global name

        name = 'pythontab.com'

        func()

        print(name)

        結(jié)果

        pythontab.com

        實(shí)例

        def func():

        name = 'pythontab'

        def foo():

        nonlocal name

        name = 'pythontab.com'

        foo()

        print(name)

        func()

        結(jié)果

        pythontab.com

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

      python學(xué)習(xí)課程預(yù)約提醒

      • 地區(qū):
      • 姓名:
      • 手機(jī):

        總結(jié)

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

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

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

      責(zé)編:hym
      • 會(huì)計(jì)考試
      • 建筑工程
      • 職業(yè)資格
      • 醫(yī)藥考試
      • 外語(yǔ)考試
      • 學(xué)歷考試