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

Python進(jìn)階學(xué)習(xí)修改閉包內(nèi)使用的外部變量

 更新時(shí)間:2022年06月17日 11:03:08   作者:落雨  
這篇文章主要為大家介紹了Python進(jìn)階學(xué)習(xí)修改閉包內(nèi)使用的外部變量實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

修改閉包內(nèi)使用的外部變量

錯(cuò)誤示例:

# 定義一個(gè)外部函數(shù)
def func_out(num1):
    # 定義一個(gè)內(nèi)部函數(shù)
    def func_inner(num2):
        # 這里本意想要修改外部num1的值,實(shí)際上是在內(nèi)部函數(shù)定義了一個(gè)局部變量num1
        num1 = 10
        # 內(nèi)部函數(shù)使用了外部函數(shù)的變量(num1)
        result = num1 + num2
        print("結(jié)果是:", result)
    print(num1)
    func_inner(1)
    print(num1)
    # 外部函數(shù)返回了內(nèi)部函數(shù),這里返回的內(nèi)部函數(shù)就是閉包
    return func_inner
# 創(chuàng)建閉包實(shí)例
f = func_out(1)
# 執(zhí)行閉包
f(2)

錯(cuò)誤示例:

# 定義一個(gè)外部函數(shù)
def func_out(num1):
    # 定義一個(gè)內(nèi)部函數(shù)
    def func_inner(num2):
        # 這里本意想要修改外部num1的值,實(shí)際上是在內(nèi)部函數(shù)定義了一個(gè)局部變量num1
        nonlocal num1  # 告訴解釋器,此處使用的是 外部變量a
        # 修改外部變量num1
        num1 = 10
        # 內(nèi)部函數(shù)使用了外部函數(shù)的變量(num1)
        result = num1 + num2
        print("結(jié)果是:", result)
    print(num1)
    func_inner(1)
    print(num1)
    # 外部函數(shù)返回了內(nèi)部函數(shù),這里返回的內(nèi)部函數(shù)就是閉包
    return func_inner
# 創(chuàng)建閉包實(shí)例
f = func_out(1)
# 執(zhí)行閉包
f(2)

小結(jié)

修改閉包內(nèi)使用的外部函數(shù)變量使用 nonlocal 關(guān)鍵字來(lái)完成。

閉包與閉包中修改外部變量

在函數(shù)嵌套的前提下,內(nèi)部函數(shù)引用了外部函數(shù)的變量,并且外部函數(shù)返回(return)了內(nèi)部函數(shù),即外部函數(shù)返回了引用了外部函數(shù)變量的內(nèi)部函數(shù),這時(shí)我們稱(chēng)內(nèi)部函數(shù)為閉包。 比如說(shuō)如下例子:

# 外部函數(shù)
def func_outer(a):
    # 內(nèi)部函數(shù)
    def func_inner(b):
        c = a + b
        return c
    return func_inner
# 創(chuàng)建閉包實(shí)例
f = func_outer(1)
# 執(zhí)行閉包
num1 = f(2)
num2 = f(3)
print(num1)
print(num2)

在這里,f就叫做閉包的實(shí)例,func_inner函數(shù)就叫做閉包 此時(shí)執(zhí)行結(jié)果如下:

可以見(jiàn)得,f里封存了外部函數(shù)的變量1,當(dāng)閉包實(shí)例建立出來(lái),再實(shí)行閉包實(shí)例,此時(shí)相當(dāng)于1+2和1+3,得到了如上結(jié)果。 使用debug可以查看到,執(zhí)行完f = func_outer(1)代碼后,此時(shí)一個(gè)函數(shù)對(duì)象已經(jīng)保存在內(nèi)存當(dāng)中:

當(dāng)一開(kāi)始步入代碼num1 = f(2)(實(shí)行閉包)后:

一個(gè)外部函數(shù).內(nèi)部函數(shù)的對(duì)象存儲(chǔ)在了內(nèi)存中,注意:在執(zhí)行完f = func_outer(1)并沒(méi)有立即產(chǎn)生這樣一個(gè)對(duì)象,而是在調(diào)用時(shí)才會(huì)產(chǎn)生該對(duì)象 這時(shí),再步入內(nèi)部函數(shù):

這樣c=3便出現(xiàn)了,此時(shí)在打印c就會(huì)出現(xiàn)3,4的出現(xiàn)與3的原理一樣

修改外部函數(shù)的變量

代碼如下:

# 外部函數(shù)
def func_outer(a):
    # 內(nèi)部函數(shù)
    def func_inner(b):
        nonlocal a
        a = 2
        c = a + b
        return c
    return func_inner
# 創(chuàng)建閉包實(shí)例
f = func_outer(1)
# 執(zhí)行閉包
num1 = f(2)
num2 = f(3)
print(num1)
print(num2)

多了一行nonlocal a 這里的nonlocal關(guān)鍵字是聲明我這里用的是外部的a,而不是自己新定義的局部變量a

以上就是Python進(jìn)階學(xué)習(xí)修改閉包內(nèi)使用的外部變量的詳細(xì)內(nèi)容,更多關(guān)于Python修改閉包內(nèi)外部變量的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python操作csv文件實(shí)例詳解

    Python操作csv文件實(shí)例詳解

    這篇文章主要為大家詳細(xì)介紹了Python操作csv文件的實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Python網(wǎng)絡(luò)編程中urllib2模塊的用法總結(jié)

    Python網(wǎng)絡(luò)編程中urllib2模塊的用法總結(jié)

    使用urllib2模塊進(jìn)行基于url的HTTP請(qǐng)求等操作大家也許都比較熟悉,這里我們?cè)偕钊雭?lái)了解一下urllib2針對(duì)HTTP的異常處理相關(guān)功能,一起來(lái)看一下Python網(wǎng)絡(luò)編程中urllib2模塊的用法總結(jié):
    2016-07-07
  • Python程序員面試題 你必須提前準(zhǔn)備!

    Python程序員面試題 你必須提前準(zhǔn)備!

    Python程序員面試,這些問(wèn)題你必須提前準(zhǔn)備!供廣大Python程序員參考,預(yù)祝大家順利通過(guò)面試。
    2018-01-01
  • python實(shí)現(xiàn)飛行棋游戲

    python實(shí)現(xiàn)飛行棋游戲

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)飛行棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • Python帶參數(shù)的裝飾器運(yùn)行原理解析

    Python帶參數(shù)的裝飾器運(yùn)行原理解析

    這篇文章主要介紹了Python帶參數(shù)的裝飾器運(yùn)行原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 詳解PANDAS 數(shù)據(jù)合并與重塑(join/merge篇)

    詳解PANDAS 數(shù)據(jù)合并與重塑(join/merge篇)

    這篇文章主要介紹了詳解PANDAS 數(shù)據(jù)合并與重塑(join/merge篇),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Python實(shí)現(xiàn)替換文件中指定內(nèi)容的方法

    Python實(shí)現(xiàn)替換文件中指定內(nèi)容的方法

    這篇文章主要介紹了Python實(shí)現(xiàn)替換文件中指定內(nèi)容的方法,涉及Python文件讀寫(xiě)、字符串替換等相關(guān)操作技巧,需要的朋友可以參考下
    2018-03-03
  • 如何使用Numpy創(chuàng)建三維矩陣

    如何使用Numpy創(chuàng)建三維矩陣

    這篇文章主要介紹了如何使用Numpy創(chuàng)建三維矩陣問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Python Tkinter Menu控件使用詳解

    Python Tkinter Menu控件使用詳解

    Menu控件(菜單控件)可以說(shuō)是 GUI 中“精髓所在”,它以可視化的方式將一系列的命令進(jìn)行分組,在每一個(gè)分組下又可以“隱藏”許多的程序執(zhí)行命令(即功能)。本文將詳細(xì)介紹它的使用,需要的可以參考一下
    2022-01-01
  • python 求1-100之間的奇數(shù)或者偶數(shù)之和的實(shí)例

    python 求1-100之間的奇數(shù)或者偶數(shù)之和的實(shí)例

    今天小編就為大家分享一篇python 求1-100之間的奇數(shù)或者偶數(shù)之和的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-06-06

最新評(píng)論

兰西县| 河池市| 锦屏县| 开江县| 仁寿县| 色达县| 霞浦县| 定边县| 杭锦旗| 九江市| 天全县| 江西省| 双桥区| 丰顺县| 璧山县| 柳林县| 柏乡县| 集安市| 万荣县| 嘉定区| 稷山县| 吉隆县| 德阳市| 安义县| 健康| 会宁县| 岗巴县| 广南县| 开平市| 金川县| 岱山县| 伽师县| 阳春市| 密山市| 青神县| 军事| 望城县| 淳化县| 阳江市| 陇南市| 老河口市|