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

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

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

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

作用范圍

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

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

outer()  
# 輸出 10
# 輸出 10,因為內(nèi)層函數(shù)通過nonlocal修改了外層函數(shù)的num變量

適用場景

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

二、閉包的作用

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

閉包可以將一些數(shù)據(jù)(即外層函數(shù)的變量)與操作這些數(shù)據(jù)的函數(shù)綁定在一起,形成一個相對獨立的單元,外界不能直接訪問這些被 “隱藏” 的數(shù)據(jù),只能通過閉包返回的函數(shù)來操作。例如,實現(xiàn)一個簡單的計數(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

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

狀態(tài)保持

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

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ù)時,都是基于上一次的狀態(tài)進行累加操作。

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

閉包可以創(chuàng)建具有特定初始狀態(tài)的函數(shù),方便在不同場景下復(fù)用。比如創(chuàng)建不同稅率的計算函數(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

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

三、注意

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

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

相關(guān)文章

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

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

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

    對Python的Django框架中的項目進行單元測試的方法

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

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

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

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

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

    OpenCV半小時掌握基本操作之圓圈檢測

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

    python numpy存取文件的方式

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

    Python實現(xiàn)爬取知乎神回復(fù)簡單爬蟲代碼分享

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

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

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

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

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

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

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

最新評論

崇阳县| 龙陵县| 南郑县| 陆河县| 临沧市| 确山县| 凤山县| 定南县| 昆明市| 海口市| 防城港市| 肥城市| 旬邑县| 连平县| 德昌县| 句容市| 雅江县| 都江堰市| 东光县| 丁青县| 东丰县| 忻城县| 商水县| 玉门市| 凌源市| 荆门市| 正安县| 湟中县| 额济纳旗| 上饶市| 九龙县| 竹溪县| 苍溪县| 新密市| 天门市| 靖宇县| 乳源| 北辰区| 比如县| 盖州市| 崇文区|