最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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 ORM框架SQLAlchemy學(xué)習(xí)筆記之?dāng)?shù)據(jù)添加和事務(wù)回滾介紹

    Python ORM框架SQLAlchemy學(xué)習(xí)筆記之?dāng)?shù)據(jù)添加和事務(wù)回滾介紹

    這篇文章主要介紹了Python ORM框架SQLAlchemy學(xué)習(xí)筆記之?dāng)?shù)據(jù)添加和事務(wù)回滾介紹,需要的朋友可以參考下
    2014-06-06
  • Python如何對(duì)音視頻文件進(jìn)行解析詳解

    Python如何對(duì)音視頻文件進(jìn)行解析詳解

    在腳本或應(yīng)用程序中,我們需要執(zhí)行音頻處理任務(wù),下面這篇文章主要給大家介紹了關(guān)于Python如何對(duì)音視頻文件進(jìn)行解析的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • Python機(jī)器學(xué)習(xí)之使用Pyecharts制作可視化大屏

    Python機(jī)器學(xué)習(xí)之使用Pyecharts制作可視化大屏

    pyecharts是一個(gè)用于生成Echarts圖表的Python庫,Echarts是百度開源的一個(gè)數(shù)據(jù)可視化 JS 庫,可以生成一些非??犰诺膱D表,這篇文章主要給大家介紹了關(guān)于Python機(jī)器學(xué)習(xí)之Pyecharts制作可視化大屏的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • Python SQLAlchemy簡介及基本用法

    Python SQLAlchemy簡介及基本用法

    SQLAlchemy是一個(gè)基于Python實(shí)現(xiàn)的ORM對(duì)象關(guān)系映射框架,該框架建立在DB API之上,使用關(guān)系對(duì)象映射進(jìn)行數(shù)據(jù)庫操作,這篇文章主要介紹了SQLAlchemy簡介以及基本使用,需要的朋友可以參考下
    2023-08-08
  • 詳解如何使用Python提取視頻文件中的音頻

    詳解如何使用Python提取視頻文件中的音頻

    在多媒體處理中,有時(shí)我們需要從視頻文件中提取音頻,本文為大家整理了幾種使用Python編程語言提取視頻文件中的音頻的方法,大家可以根據(jù)需要進(jìn)行選擇
    2025-03-03
  • 解讀Python腳本的常見參數(shù)獲取和處理方式

    解讀Python腳本的常見參數(shù)獲取和處理方式

    這篇文章主要介紹了Python腳本的常見參數(shù)獲取和處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Python基本結(jié)構(gòu)之判斷語句的用法詳解

    Python基本結(jié)構(gòu)之判斷語句的用法詳解

    在程序的設(shè)計(jì)當(dāng)中,代碼并不是逐步按照順序進(jìn)行執(zhí)行的,在運(yùn)行到某一行代碼當(dāng)中,需要停下進(jìn)行判斷接下來將要運(yùn)行到那一個(gè)分支代碼,這種判斷就代表的是分支結(jié)構(gòu)。分支結(jié)構(gòu)是可以使用?if?語句來進(jìn)行判斷的,而我們本篇博客講的也是?if?語句,需要的可以了解一下
    2022-07-07
  • Python搭建NLP模型的步驟和代碼詳解

    Python搭建NLP模型的步驟和代碼詳解

    這篇文章主要為大家詳細(xì)介紹了Python搭建NLP模型的詳細(xì)步驟,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-03-03
  • python飛機(jī)大戰(zhàn) pygame游戲創(chuàng)建快速入門詳解

    python飛機(jī)大戰(zhàn) pygame游戲創(chuàng)建快速入門詳解

    這篇文章主要介紹了python飛機(jī)大戰(zhàn) pygame游戲創(chuàng)建,結(jié)合實(shí)例形式詳細(xì)分析了Python使用pygame創(chuàng)建飛機(jī)大戰(zhàn)游戲的具體步驟與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2019-12-12
  • TensorFlow深度學(xué)習(xí)另一種程序風(fēng)格實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)

    TensorFlow深度學(xué)習(xí)另一種程序風(fēng)格實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)

    這篇文章主要介紹了TensorFlow卷積神經(jīng)網(wǎng)絡(luò)的另一種程序風(fēng)格實(shí)現(xiàn)方式示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-11-11

最新評(píng)論

高邮市| 三门县| 西乌| 蓬莱市| 天全县| 阿瓦提县| 瑞丽市| 唐山市| 正镶白旗| 桐柏县| 濮阳县| 赤壁市| 肥城市| 德安县| 安丘市| 阿克苏市| 独山县| 会理县| 东阿县| 尚志市| 托里县| 沂水县| 乌苏市| 扶沟县| 鹿邑县| 黎平县| 常熟市| 普安县| 长宁区| 丹凤县| 金华市| 修武县| 钦州市| 广灵县| 临沭县| 荥经县| 贡觉县| 丘北县| 平塘县| 荔浦县| 清水县|