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

Python中nonlocal和global的區(qū)別及閉包使用

 更新時(shí)間:2025年12月30日 09:38:19   作者:達(dá)寧214  
本文主要介紹了Python中nonlocal和global的區(qū)別及閉包使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

一、nonlocal和global的區(qū)別

作用范圍

  • global:用于在函數(shù)內(nèi)部聲明一個(gè)變量是全局變量。如果在函數(shù)中使用 global 關(guān)鍵字聲明了某個(gè)變量,那么在函數(shù)內(nèi)部對(duì)該變量的操作,就是對(duì)全局作用域中這個(gè)變量的操作。例如:
count = 10
def modify_count():
    global count
    count = 20
    print(count)

modify_count()  # 輸出 20
print(count)    # 輸出 20,全局變量count已經(jīng)被修改
  • nonlocal:用于在嵌套函數(shù)中,聲明一個(gè)變量不是當(dāng)前函數(shù)的局部變量,而是來(lái)自外層(非全局)函數(shù)的變量。它使得內(nèi)層函數(shù)可以修改外層函數(shù)中定義的變量,前提是外層函數(shù)中沒(méi)有使用 global 聲明這個(gè)變量。比如:
def outer():
    num = 5
    def inner():
        nonlocal num
        num = 10
        print(num)
    inner()
    print(num)

outer()  
# 輸出 10
# 輸出 10,因?yàn)閮?nèi)層函數(shù)通過(guò)nonlocal修改了外層函數(shù)的num變量

適用場(chǎng)景

  • global:當(dāng)需要在函數(shù)內(nèi)部修改全局作用域中的變量時(shí)使用。
  • nonlocal:在函數(shù)嵌套的場(chǎng)景下,內(nèi)層函數(shù)想要修改外層函數(shù)中定義的變量,且該變量不是全局變量時(shí)使用。

二、閉包的作用

數(shù)據(jù)隱藏與封裝

閉包可以將一些數(shù)據(jù)(即外層函數(shù)的變量)與操作這些數(shù)據(jù)的函數(shù)綁定在一起,形成一個(gè)相對(duì)獨(dú)立的單元,外界不能直接訪問(wèn)這些被 “隱藏” 的數(shù)據(jù),只能通過(guò)閉包返回的函數(shù)來(lái)操作。例如,實(shí)現(xiàn)一個(gè)簡(jiǎn)單的計(jì)數(shù)器:

def counter():
    count = 0
    def increment():
        nonlocal count
        count += 1
        return count
    return increment

count_func = counter()
print(count_func())  # 輸出 1
print(count_func())  # 輸出 2
print(count_func())  # 輸出 3

在這個(gè)例子中,count 變量被隱藏在閉包內(nèi)部,外界無(wú)法直接訪問(wèn)和修改,只能通過(guò) increment 函數(shù)來(lái)對(duì)其進(jìn)行遞增操作,實(shí)現(xiàn)了數(shù)據(jù)的封裝。

狀態(tài)保持

閉包可以 “記住” 外層函數(shù)執(zhí)行時(shí)的變量狀態(tài),方便在多次調(diào)用返回的函數(shù)時(shí),基于之前的狀態(tài)進(jìn)行操作。比如模擬一個(gè)累加器:

def accumulator(initial_value=0):
    def accumulate(num):
        nonlocal initial_value
        initial_value += num
        return initial_value
    return accumulate

acc = accumulator(5)
print(acc(3))  # 輸出 8,初始值5加上傳入的3
print(acc(2))  # 輸出 10,基于上一次結(jié)果8再加上傳入的2

這里閉包記住了 initial_value 的狀態(tài),每次調(diào)用 accumulate 函數(shù)時(shí),都是基于上一次的狀態(tài)進(jìn)行累加操作。

函數(shù)復(fù)用

閉包可以創(chuàng)建具有特定初始狀態(tài)的函數(shù),方便在不同場(chǎng)景下復(fù)用。比如創(chuàng)建不同稅率的計(jì)算函數(shù):

def tax_calculator(tax_rate):
    def calculate_tax(amount):
        return amount * tax_rate
    return calculate_tax

calculate_sales_tax = tax_calculator(0.08)  # 8% 的銷售稅
calculate_income_tax = tax_calculator(0.2)  # 20% 的所得稅
print(calculate_sales_tax(100))  # 輸出 8
print(calculate_income_tax(1000))  # 輸出 200

通過(guò) tax_calculator 函數(shù)創(chuàng)建不同稅率的計(jì)算函數(shù),這些函數(shù)都能復(fù)用內(nèi)部計(jì)算邏輯,只是初始的稅率不同。

三、注意

在 Python 中,內(nèi)部函數(shù)本來(lái)就可以 “讀取” 外層函數(shù)的變量(包括參數(shù)),但只有通過(guò) nonlocal 聲明后,才能 “修改” 外層函數(shù)的變量。

到此這篇關(guān)于Python中nonlocal和global的區(qū)別及閉包使用的文章就介紹到這了,更多相關(guān)Python nonlocal和global內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python獲取網(wǎng)絡(luò)圖片和視頻的示例代碼

    Python獲取網(wǎng)絡(luò)圖片和視頻的示例代碼

    Python 是一種多用途語(yǔ)言,廣泛用于腳本編寫(xiě)。我們可以編寫(xiě)Python 腳本來(lái)自動(dòng)化日常事務(wù)。本文將用Python實(shí)現(xiàn)獲取Google圖片和YouTube視頻,需要的可以參考一下
    2022-03-03
  • 對(duì)Python的Django框架中的項(xiàng)目進(jìn)行單元測(cè)試的方法

    對(duì)Python的Django框架中的項(xiàng)目進(jìn)行單元測(cè)試的方法

    這篇文章主要介紹了對(duì)Python的Django框架中的項(xiàng)目進(jìn)行單元測(cè)試的方法,使用Django中的tests.py模塊可以輕松地檢測(cè)出一些常見(jiàn)錯(cuò)誤,需要的朋友可以參考下
    2016-04-04
  • 淺談Django QuerySet對(duì)象(模型.objects)的常用方法

    淺談Django QuerySet對(duì)象(模型.objects)的常用方法

    這篇文章主要介紹了淺談Django QuerySet對(duì)象(模型.objects)的常用方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-03-03
  • 基于python的圖片修復(fù)程序(實(shí)現(xiàn)水印去除)

    基于python的圖片修復(fù)程序(實(shí)現(xiàn)水印去除)

    這篇文章主要給大家介紹了關(guān)于python圖片修復(fù)程序的相關(guān)資料,可以用于實(shí)現(xiàn)圖片中水印去除,主要利用的是OpenCV這個(gè)框架實(shí)現(xiàn)的,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧
    2018-06-06
  • OpenCV半小時(shí)掌握基本操作之圓圈檢測(cè)

    OpenCV半小時(shí)掌握基本操作之圓圈檢測(cè)

    這篇文章主要介紹了OpenCV基本操作之圓圈檢測(cè),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • python numpy存取文件的方式

    python numpy存取文件的方式

    NumPy提供了多種存取數(shù)組內(nèi)容的文件操作函數(shù)。保存數(shù)組數(shù)據(jù)的文件可以是二進(jìn)制格式或者文本格式。這篇文章主要介紹了python利用numpy存取文件,需要的朋友可以參考下
    2019-09-09
  • Python實(shí)現(xiàn)爬取知乎神回復(fù)簡(jiǎn)單爬蟲(chóng)代碼分享

    Python實(shí)現(xiàn)爬取知乎神回復(fù)簡(jiǎn)單爬蟲(chóng)代碼分享

    這篇文章主要介紹了Python實(shí)現(xiàn)爬取知乎神回復(fù)簡(jiǎn)單爬蟲(chóng)代碼分享,本文實(shí)現(xiàn)了爬取知乎的“如何正確地吐槽”收藏夾,是對(duì)個(gè)人的一個(gè)興趣實(shí)現(xiàn),需要的朋友可以參考下
    2015-01-01
  • Python中單下劃線和雙下劃線的使用詳解

    Python中單下劃線和雙下劃線的使用詳解

    在Python編程中,我們經(jīng)常會(huì)遇到單下劃線(_)和雙下劃線(__)的使用,本文就來(lái)和大家詳細(xì)講講單下劃線和雙下劃線的含義和用法,希望對(duì)大家有所幫助
    2023-06-06
  • Pycharm導(dǎo)包失敗問(wèn)題及解決

    Pycharm導(dǎo)包失敗問(wèn)題及解決

    這篇文章主要介紹了Pycharm導(dǎo)包失敗問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 詳解TensorFlow訓(xùn)練網(wǎng)絡(luò)兩種方式

    詳解TensorFlow訓(xùn)練網(wǎng)絡(luò)兩種方式

    本文主要介紹了TensorFlow訓(xùn)練網(wǎng)絡(luò)兩種方式,一種是基于tensor(array),另外一種是迭代器,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12

最新評(píng)論

高邮市| 平和县| 开远市| 长汀县| 微博| 五华县| 桃园市| 财经| 固镇县| 苍山县| 蓬溪县| 墨竹工卡县| 宜君县| 祥云县| 永德县| 扶风县| 伊通| 唐山市| 新乐市| 泗水县| 武定县| 三江| 楚雄市| 邛崃市| 开封市| 长岭县| 怀仁县| 册亨县| 贡嘎县| 崇州市| 长岛县| 木里| 罗定市| 衡南县| 嘉兴市| 抚州市| 津南区| 遵义市| 余干县| 白水县| 仙居县|