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

Python局部函數(shù)及用法詳解(含nonlocal關(guān)鍵字)

 更新時(shí)間:2022年12月26日 14:58:18   作者:梁辰興  
局部函數(shù)有哪些特征,在使用時(shí)需要注意什么呢?接下來就給讀者詳細(xì)介紹?Python?局部函數(shù)的用法,對(duì)Python局部函數(shù)相關(guān)知識(shí)感興趣的朋友跟隨小編一起看看吧

Python局部函數(shù)及用法

通過前面的學(xué)習(xí)我們知道,Python 函數(shù)內(nèi)部可以定義變量,這樣就產(chǎn)生了局部變量,有讀者可能會(huì)問,Python 函數(shù)內(nèi)部能定義函數(shù)嗎?答案是肯定的。Python 支持在函數(shù)內(nèi)部定義函數(shù),此類函數(shù)又稱為局部函數(shù)。

那么,局部函數(shù)有哪些特征,在使用時(shí)需要注意什么呢?接下來就給讀者詳細(xì)介紹 Python 局部函數(shù)的用法。

首先,和局部變量一樣,默認(rèn)情況下局部函數(shù)只能在其所在函數(shù)的作用域內(nèi)使用。舉個(gè)例子:

#全局函數(shù)
def outdef ():
    #局部函數(shù)
    def indef():
        print("http://www.csdn.net/python/")
    #調(diào)用局部函數(shù)
    indef()
#調(diào)用全局函數(shù)
outdef()

程序執(zhí)行結(jié)果為:

http://www.csdn.net/python/

就如同全局函數(shù)返回其局部變量,就可以擴(kuò)大該變量的作用域一樣,通過將局部函數(shù)作為所在函數(shù)的返回值,也可以擴(kuò)大局部函數(shù)的使用范圍。例如,修改上面程序?yàn)椋?/p>

#全局函數(shù)
def outdef ():
    #局部函數(shù)
    def indef():
        print("調(diào)用局部函數(shù)")
    #調(diào)用局部函數(shù)
    return indef
#調(diào)用全局函數(shù)
new_indef = outdef()
調(diào)用全局函數(shù)中的局部函數(shù)
new_indef()

程序執(zhí)行結(jié)果為:

調(diào)用局部函數(shù)

因此,對(duì)于局部函數(shù)的作用域,可以總結(jié)為:如果所在函數(shù)沒有返回局部函數(shù),則局部函數(shù)的可用范圍僅限于所在函數(shù)內(nèi)部;反之,如果所在函數(shù)將局部函數(shù)作為返回值,則局部函數(shù)的作用域就會(huì)擴(kuò)大,既可以在所在函數(shù)內(nèi)部使用,也可以在所在函數(shù)的作用域中使用。

以上面程序中的 outdef() 和 indef() 為例,如果 outdef() 不將 indef 作為返回值,則 indef() 只能在 outdef() 函數(shù)內(nèi)部使用;反之,則 indef() 函數(shù)既可以在 outdef() 函數(shù)內(nèi)部使用,也可以在 outdef() 函數(shù)的作用域,也就是全局范圍內(nèi)使用。

另外值得一提的是,如果局部函數(shù)中定義有和所在函數(shù)中變量同名的變量,也會(huì)發(fā)生“遮蔽”的問題。例如:

#全局函數(shù)
def outdef ():
    name = "所在函數(shù)中定義的 name 變量"
    #局部函數(shù)
    def indef():
        print(name)
        name = "局部函數(shù)中定義的 name 變量"
    indef()
#調(diào)用全局函數(shù)
outdef()

執(zhí)行此程序,Python 解釋器會(huì)報(bào)如下錯(cuò)誤:

UnboundLocalError: local variable 'name' referenced before assignment

此錯(cuò)誤直譯過來的意思是“局部變量 name 還沒定義就使用”。導(dǎo)致該錯(cuò)誤的原因就在于,局部函數(shù) indef() 中定義的 name 變量遮蔽了所在函數(shù) outdef() 中定義的 name 變量。再加上,indef() 函數(shù)中 name 變量的定義位于 print() 輸出語句之后,導(dǎo)致 print(name) 語句在執(zhí)行時(shí)找不到定義的 name 變量,因此程序報(bào)錯(cuò)。

由于這里的 name 變量也是局部變量,因此前面章節(jié)講解的 globals() 函數(shù)或者 globals 關(guān)鍵字,并不適用于解決此問題。這里可以使用 Python 提供的 nonlocal 關(guān)鍵字。

例如,修改上面程序?yàn)椋?/p>

#全局函數(shù)
def outdef ():
    name = "所在函數(shù)中定義的 name 變量"
    #局部函數(shù)
    def indef():
        nonlocal name
        print(name)
        #修改name變量的值
        name = "局部函數(shù)中定義的 name 變量"
    indef()
#調(diào)用全局函數(shù)
outdef()

程序執(zhí)行結(jié)果為:

所在函數(shù)中定義的 name 變量

到此這篇關(guān)于Python局部函數(shù)及用法(含nonlocal關(guān)鍵字)的文章就介紹到這了,更多相關(guān)Python局部函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python?多線程知識(shí)點(diǎn)總結(jié)及實(shí)例用法

    Python?多線程知識(shí)點(diǎn)總結(jié)及實(shí)例用法

    在本篇內(nèi)容里小編給大家整理了一篇關(guān)于Python?多線程知識(shí)點(diǎn)總結(jié)及實(shí)例用法,對(duì)想好學(xué)習(xí)PY的用戶非常友好,需要的參考下吧。
    2021-12-12
  • django2用iframe標(biāo)簽完成網(wǎng)頁內(nèi)嵌播放b站視頻功能

    django2用iframe標(biāo)簽完成網(wǎng)頁內(nèi)嵌播放b站視頻功能

    這篇文章主要介紹了django2 用iframe標(biāo)簽完成 網(wǎng)頁內(nèi)嵌播放b站視頻功能,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-06-06
  • Python設(shè)計(jì)模式中的策略模式詳解

    Python設(shè)計(jì)模式中的策略模式詳解

    策略模式屬于Python-設(shè)計(jì)模式中行為模式之一,該模式定義了一系列算法,并將每個(gè)算法封裝起來,使它們可以相互替換。本文將通過示例詳細(xì)講解這一模式,需要的可以參考一下
    2023-02-02
  • python實(shí)現(xiàn)簡(jiǎn)單的學(xué)生成績(jī)管理系統(tǒng)

    python實(shí)現(xiàn)簡(jiǎn)單的學(xué)生成績(jī)管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)簡(jiǎn)單的學(xué)生成績(jī)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Python基礎(chǔ)詳解之郵件處理

    Python基礎(chǔ)詳解之郵件處理

    這篇文章主要介紹了Python基礎(chǔ)詳解之郵件處理,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • matplotlib實(shí)現(xiàn)數(shù)據(jù)實(shí)時(shí)刷新的示例代碼

    matplotlib實(shí)現(xiàn)數(shù)據(jù)實(shí)時(shí)刷新的示例代碼

    這篇文章主要介紹了matplotlib實(shí)現(xiàn)數(shù)據(jù)實(shí)時(shí)刷新的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 利用python檢查磁盤空間使用情況的代碼實(shí)現(xiàn)

    利用python檢查磁盤空間使用情況的代碼實(shí)現(xiàn)

    本文將向讀者展示如何利用Python編寫自動(dòng)化腳本,以檢查磁盤空間使用情況,無論你是經(jīng)驗(yàn)豐富的系統(tǒng)管理員,還是對(duì)Python自動(dòng)化充滿興趣的開發(fā)者,本文都將為你提供實(shí)用的腳本示例和詳細(xì)的解析步驟,幫助你快速掌握磁盤空間監(jiān)控的自動(dòng)化方法,需要的朋友可以參考下
    2024-08-08
  • 簡(jiǎn)述python Scrapy框架

    簡(jiǎn)述python Scrapy框架

    這篇文章主要介紹了python Scrapy框架的相關(guān)資料,幫助大家開始學(xué)習(xí)python 爬蟲,感興趣的朋友可以了解下
    2020-08-08
  • 詳解Python中數(shù)據(jù)處理的方法總結(jié)及實(shí)現(xiàn)

    詳解Python中數(shù)據(jù)處理的方法總結(jié)及實(shí)現(xiàn)

    數(shù)據(jù)增強(qiáng)作為前處理的關(guān)鍵步驟,在整個(gè)計(jì)算機(jī)視覺中有著具足輕重的地位。本文為大家總結(jié)了Python中數(shù)據(jù)處理的方法及實(shí)現(xiàn),需要的可以參考一下
    2022-09-09
  • 用Python的urllib庫提交WEB表單

    用Python的urllib庫提交WEB表單

    上次實(shí)現(xiàn)的校園網(wǎng)IP網(wǎng)關(guān)登錄器其中一個(gè)關(guān)鍵部分就是提交登錄網(wǎng)頁的表單,下面是我的Python實(shí)現(xiàn)代碼
    2009-02-02

最新評(píng)論