欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中 Global和Nonlocal的用法詳解

 更新時(shí)間:2020年01月20日 09:04:52   作者:叉叉敵  
global關(guān)鍵字用來(lái)在函數(shù)或其他局部作用域中使用全局變量, nonlocal聲明的變量不是局部變量,也不是全局變量,而是外部嵌套函數(shù)內(nèi)的變量。這篇文章主要介紹了Python中 Global和Nonlocal的用法,需要的朋友可以參考下

nonlocal 和 global 也很容易混淆。簡(jiǎn)單記錄下自己的理解。

解釋

global

總之一句話,作用域是全局的,就是會(huì)修改這個(gè)變量對(duì)應(yīng)地址的值。

global 語(yǔ)句是一個(gè)聲明,它適用于整個(gè)當(dāng)前代碼塊。 這意味著列出的標(biāo)識(shí)符將被解釋為全局變量。 盡管自由變量可能指的是全局變量而不被聲明為全局變量。

global 語(yǔ)句中列出的名稱不得用于該全局語(yǔ)句之前的文本代碼塊中。

global 語(yǔ)句中列出的名稱不能定義為形式參數(shù),也不能在 for 循環(huán)控制目標(biāo)、 class 定義、函數(shù)定義、 import 語(yǔ)句或變量注釋中定義。

當(dāng)前的實(shí)現(xiàn)并不強(qiáng)制執(zhí)行這些限制,但是程序不應(yīng)該濫用這種自由,因?yàn)槲磥?lái)的實(shí)現(xiàn)可能會(huì)強(qiáng)制執(zhí)行這些限制,或者悄悄地改變程序的含義。

程序員注意: global 是指向解析器的指令。 它僅適用于與全局語(yǔ)句同時(shí)解析的代碼。 特別是,包含在提供給內(nèi)置 exec() 函數(shù)的字符串或代碼對(duì)象中的全局語(yǔ)句不會(huì)影響包含函數(shù)調(diào)用的代碼塊,而且這種字符串中包含的代碼不會(huì)受包含函數(shù)調(diào)用的代碼中的全局語(yǔ)句的影響。 eval() 和 compile() 函數(shù)也是如此。

一、global

1、global關(guān)鍵字用來(lái)在函數(shù)或其他局部作用域中使用全局變量。但是如果不修改全局變量也可以不使用global關(guān)鍵字。

gcount = 0
def global_test():
  gcount+=1
  print (gcount)
global_test()

以上代碼會(huì)報(bào)錯(cuò):第一行定義了全局變量,在內(nèi)部函數(shù)中又對(duì)外部函數(shù)進(jìn)行了引用并修改,那么python會(huì)認(rèn)為它是一個(gè)局部變量,有因?yàn)閮?nèi)部函數(shù)沒(méi)有對(duì)其gcount進(jìn)行定義和賦值,所以報(bào)錯(cuò)。

2、如果局部要對(duì)全局變量修改,則在局部聲明該全局變量

gcount = 0
def global_test():
  global gcount
  gcount+=1
  print (gcount)
global_test()

以上輸出為:1

3、如果局部不聲明全局變量,并且不修改全局變量,則可以正常使用

gcount = 0
def global_test():
  print (gcount)
global_test()

以上輸出為:0

 二、nonlocal

 nonlocal

只在閉包里面生效,作用域就是閉包里面的,外函數(shù)和內(nèi)函數(shù)都影響,但是閉包外面不影響。

nonlocal 語(yǔ)句使列出的標(biāo)識(shí)符引用除 global 變量外最近的封閉范圍中的以前綁定的變量。 這很重要,因?yàn)榻壎ǖ哪J(rèn)行為是首先搜索本地名稱空間。 該語(yǔ)句允許封裝的代碼將變量重新綁定到除全局(模塊)作用域之外的本地作用域之外。

nonlocal 語(yǔ)句中列出的名稱與 global 語(yǔ)句中列出的名稱不同,它們必須引用封閉范圍中已經(jīng)存在的綁定(無(wú)法明確確定應(yīng)在其中創(chuàng)建新綁定的范圍)。

1、 nonlocal聲明的變量不是局部變量,也不是全局變量,而是外部嵌套函數(shù)內(nèi)的變量

def make_counter():
  count = 0
  def counter():
    nonlocal count
    count += 1
    return count
  return counter   
def make_counter_test():
 mc = make_counter()
 print(mc())
 print(mc())
 print(mc())
make_counter_test()

  以上輸出為:

1

2

3

三、混合使用

def scope_test():
  def do_local():
    spam = "local spam" #此函數(shù)定義了另外的一個(gè)spam字符串變量,并且生命周期只在此函數(shù)內(nèi)。此處的spam和外層的spam是兩個(gè)變量,如果寫出spam = spam + “l(fā)ocal spam” 會(huì)報(bào)錯(cuò)
  def do_nonlocal():
    nonlocal spam    #使用外層的spam變量
    spam = "nonlocal spam"
  def do_global():
    global spam
    spam = "global spam"
  spam = "test spam"
  do_local()
  print("After local assignmane:", spam)
  do_nonlocal()
  print("After nonlocal assignment:",spam)
  do_global()
  print("After global assignment:",spam)
 
scope_test()
print("In global scope:",spam)

以上輸出為:

After local assignmane: test spam
After nonlocal assignment: nonlocal spam
After global assignment: nonlocal spam
In global scope: global spam

總結(jié)

以上所述是小編給大家介紹的Python中 Global和Nonlocal的用法詳解,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

相關(guān)文章

  • Python Excel處理庫(kù)openpyxl使用詳解

    Python Excel處理庫(kù)openpyxl使用詳解

    openpyxl是一個(gè)第三方庫(kù),可以處理xlsx格式的Excel文件。這篇文章主要介紹了Python Excel處理庫(kù)openpyxl使用詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-05-05
  • Python3爬蟲里關(guān)于識(shí)別微博宮格驗(yàn)證碼的知識(shí)點(diǎn)詳解

    Python3爬蟲里關(guān)于識(shí)別微博宮格驗(yàn)證碼的知識(shí)點(diǎn)詳解

    在本篇文章里小編給大家分享了關(guān)于Python3爬蟲里關(guān)于識(shí)別微博宮格驗(yàn)證碼的知識(shí)點(diǎn),有興趣的朋友們可以參考下。
    2020-07-07
  • python中復(fù)數(shù)的共軛復(fù)數(shù)知識(shí)點(diǎn)總結(jié)

    python中復(fù)數(shù)的共軛復(fù)數(shù)知識(shí)點(diǎn)總結(jié)

    在本篇內(nèi)容里小編給大家整理的是關(guān)于python中復(fù)數(shù)的共軛復(fù)數(shù)知識(shí)點(diǎn)總結(jié),有需要的朋友們可以學(xué)習(xí)下。
    2020-12-12
  • Python使用tkinter模塊實(shí)現(xiàn)推箱子游戲

    Python使用tkinter模塊實(shí)現(xiàn)推箱子游戲

    這篇文章主要介紹了Python使用tkinter模塊實(shí)現(xiàn)推箱子游戲,主要分享兩點(diǎn),第一就是這個(gè)程序的實(shí)現(xiàn)過(guò)程,第二點(diǎn)就是我在編寫過(guò)程中的一些思考。本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參看下吧
    2019-10-10
  • 使用python繪制二元函數(shù)圖像的實(shí)例

    使用python繪制二元函數(shù)圖像的實(shí)例

    今天小編就為大家分享一篇使用python繪制二元函數(shù)圖像的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • 淺談tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意點(diǎn)

    淺談tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意點(diǎn)

    這篇文章主要介紹了淺談tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意點(diǎn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Python中不同數(shù)據(jù)對(duì)象的空值校驗(yàn)的方法小結(jié)

    Python中不同數(shù)據(jù)對(duì)象的空值校驗(yàn)的方法小結(jié)

    Python中有多種數(shù)據(jù)對(duì)象,每種都有其特定的空值表示方法和校驗(yàn)方式,本文將深入探討這些空值校驗(yàn)的方法,有需要的小伙伴可以參考一下
    2024-04-04
  • pyqt5 實(shí)現(xiàn)多窗口跳轉(zhuǎn)的方法

    pyqt5 實(shí)現(xiàn)多窗口跳轉(zhuǎn)的方法

    今天小編就為大家分享一篇pyqt5 實(shí)現(xiàn)多窗口跳轉(zhuǎn)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-06-06
  • Pandas DataFrame求差集的示例代碼

    Pandas DataFrame求差集的示例代碼

    這篇文章主要介紹了Pandas DataFrame求差集的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Python類和對(duì)象的定義與實(shí)際應(yīng)用案例分析

    Python類和對(duì)象的定義與實(shí)際應(yīng)用案例分析

    這篇文章主要介紹了Python類和對(duì)象的定義與實(shí)際應(yīng)用,結(jié)合三個(gè)具體案例形式分析了Python面向?qū)ο蟪绦蛟O(shè)計(jì)中類與對(duì)象的定義、應(yīng)用、設(shè)計(jì)模式等相關(guān)操作技巧,需要的朋友可以參考下
    2018-12-12

最新評(píng)論