91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python中的閉包是什么意思

發布時間:2021-07-28 17:13:16 來源:億速云 閱讀:173 作者:chen 欄目:互聯網科技

這篇文章主要介紹“python中的閉包是什么意思”,在日常操作中,相信很多人在python中的閉包是什么意思問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”python中的閉包是什么意思”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

閉包的定義

閉包就是函數內部定義的函數。

閉包的邏輯

理解閉包的邏輯之后,有了一定python基礎的都可以很容易寫出閉包。下面通過案例來講一下閉包的邏輯。

def discount(x):
    if x<0.5 or x>1:
        return None
    def count(prince, number):
        result = prince * number
        pay = result * x
        print(f'總價是{result}元,實付{pay}元')
    return count
discount(0.8)(2.88, 100)

out:
總價是288.0元,實付230.4元

以上代碼是銷售商品時經常遇到的案例,discount函數是外層函數,用來檢測打折數字是否合理。count是內層函數,用來計算總金額和實付金額。

python解釋器遇到def discount時會在全局命名空間增加一個discount對象,它的值指向discount函數內的代碼塊。此時discount函數沒有運行。

在遇到discount(0.8)(2.88, 100)時開始運行函數discount(0.8),在遇到def count會在discount的局部命名空間增加一個count對象,它的值指向count函數內的代碼塊。在遇到return count時會把count對象返回給discount(0.8)(2.88,100)。此時discount(0.8)部分已經運行完畢,接下來運行的是count(2.88,100)。count(2.88,100)內部代碼塊運行完畢后,整個閉包函數運行完畢。

python中的閉包是什么意思)

閉包的擴展

我們可以通過如下的方式對閉包進行擴展,更加方便使用:

def discount(x):
    if x < 0.5 or x > 1:
        print('折扣數字不合理。')
        return

    def count(prince, number):
        result = prince * number
        pay = result * x
        print(f'總價是{result}元,實付{pay}元')

    return count

goldcard = discount(0.7)
silvercard = discount(0.9)
commomcard = discount(1)
goldcard(2.88, 100)
silvercard(2.88, 100)
commomcard(2.88,100)
print(id(goldcard))
print(id(silvercard))
print(id(commomcard))

out:
總價是288.0元,實付201.6元
總價是288.0元,實付259.2元
總價是288.0元,實付288.0元
1986802704096
1987081368336
1987081368192

將外層函數加參數賦值給另外一個變量,相當于定義了一個新的函數,提高了代碼復用率。上述goldcard、silvercard、commomcard這3個函數雖然都指向了discount函數,但是因為它們的參數不同,實際上是3個獨立的對象,可以看到它們的id各不相同。

到此,關于“python中的閉包是什么意思”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

揭东县| 凉城县| 九江县| 天津市| 秦皇岛市| 遂昌县| 天峻县| 本溪| 石楼县| 怀宁县| 台北市| 遂平县| 剑川县| 富裕县| 丹寨县| 双鸭山市| 彭州市| 家居| 汉寿县| 巴南区| 延吉市| 临西县| 句容市| 宜黄县| 东安县| 永春县| 讷河市| 安泽县| 金昌市| 民丰县| 泸西县| 赣州市| 蒙自县| 夏邑县| 白水县| 罗田县| 门源| 台湾省| 洛南县| 定远县| 开江县|