华南俳烁实业有限公司

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é)歷考試
德兴市| 盐城市| 综艺| 霸州市| 抚松县| 永年县| 拜城县| 沁阳市| 互助| 饶河县| 灵武市| 建宁县| 赤水市| 临泉县| 城市| 岳西县| 靖边县| 盘锦市| 龙岩市| 平塘县| 广平县| 饶河县| 夏邑县| 遵义县| 鹤峰县| 休宁县| 多伦县| 东乌珠穆沁旗| 牡丹江市| 安达市| 德令哈市| 定安县| 平定县| 县级市| 微山县| 鄂伦春自治旗| 高州市| 定西市| 新源县| 瑞昌市| 太康县|