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

python裝飾器設置參數(shù)方式

 更新時間:2024年02月19日 08:38:27   作者:道航不高  
這篇文章主要介紹了python裝飾器設置參數(shù)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

前言

一開始沒打算寫這篇文章的,今天整理筆記看到了偏函數(shù)的帖子在拿裝飾器舉例對比。

然后就想到既然裝飾器本身也是函數(shù),為啥不可以給裝飾器也設置上參數(shù),來進一步提高裝飾器的復用性呢?

于是把思路整理了一下,就有了本文。

裝飾器原理回顧

在我的另一篇關(guān)于裝飾器的文章中有跟大家提到過,裝飾器實際上就是一個閉包函數(shù),在閉包函數(shù)的內(nèi)部函數(shù)中添加裝飾的內(nèi)容并調(diào)用被裝飾的函數(shù)。

以達到 fun = decorator(fun) 的效果:

def decorator(fun):
    def inner(name):
        print("Hi")
        fun(name)
    return inner

@decorator
def get_last_name(name):
    print(f"你就是小{name[0]}吧")
    
get_last_name("王富貴")

從上面的例子中我們可以簡單的總結(jié)出裝飾器不同參數(shù)設置的規(guī)律:

裝飾器外部的函數(shù)傳的參數(shù)是被裝飾函數(shù)的函數(shù)名,內(nèi)部函數(shù)的參數(shù)是被裝飾函數(shù)的參數(shù)。

使用裝飾器時,被裝飾函數(shù)的參數(shù)name是先傳遞給裝飾器的內(nèi)部函數(shù),內(nèi)部函數(shù)調(diào)用被裝飾函數(shù)時將參數(shù)name傳遞給被裝飾函數(shù)。

而外部函數(shù)接收的參數(shù)時被裝飾函數(shù)的函數(shù)名,注意,外部函數(shù)的參數(shù)只能有一個也只能是被裝飾函數(shù)的函數(shù)名。

"""錯誤寫法"""
def decorator(fun,*args_outer):
    def inner(*args_inner):
        pass

一個很簡單的道理,裝飾器的用法是@+裝飾器名+被裝飾函數(shù)。

其工作原理就是fun = decorator(fun) ,即裝飾器接收的第一個參數(shù)就必須是被裝飾函數(shù)名,如果設置其他參數(shù)的話在第一個參數(shù)都缺失的情況下怎么傳?

不過并不是完全沒辦法,換一換思路就可以了,下面就是本文要講的干貨了

裝飾器設置參數(shù):多層閉包嵌套

?我們都知道,裝飾器就是一個閉包函數(shù),外部接收被裝飾函數(shù)名,內(nèi)部裝飾再調(diào)用被裝飾函數(shù)。

那么我們?yōu)樯恫辉谶@個閉包函數(shù)的外部再嵌套一層函數(shù)用來接收自己想要的參數(shù)呢?

廢話不多說,舉例子上代碼:

"""假設一家燒烤店可以送外賣,外賣比堂食要多出打包盒跟配送費兩項費用"""
def decorator_outer(*args_outer):   # 接收正常在店內(nèi)消費之外的其他費用
    def decorator_inner(fun):
        def inner(*args_inner):     # 接收在正常參數(shù)的費用
            new_args = args_outer + args_inner
            return fun(*new_args)
        return inner
    return decorator_inner

@decorator_outer(3,5)   # 打包盒3元,配送費5元
def monetary(*args):    # 計算每份菜品價格之和
    themoney = 0
    for m in args:
        themoney += m
    return themoney

上一次的文章說到,閉包調(diào)用內(nèi)部函數(shù)的方法是decorator()(),那么類似上述代碼中多嵌套了一層就自然是decorator_outer()()()。

也就是說按照裝飾器的工作原理,上述代碼的工作原理就是

monetary = decorator_outer(3,5)(monetary)

小小的提醒一下,閉包嵌套層次越多就一定要注意看看被裝飾函數(shù)的返回值有沒有被一層層的返回出來,不然最后返回一個空值又不報錯很難排查。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python 列表排序詳解

    Python 列表排序詳解

    這篇文章主要介紹了Python中對列表排序?qū)嵗?本文給出了9個List的排序?qū)嵗?需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-10-10
  • Python使用SymSpell打造簡單的極速拼寫檢查引擎

    Python使用SymSpell打造簡單的極速拼寫檢查引擎

    在自然語言處理(NLP)領域,拼寫檢查是提升文本質(zhì)量的關(guān)鍵環(huán)節(jié),SymSpell是一個基于對稱刪除算法的Python庫,下面小編就和大家詳細講講如何使用SymSpell打造簡單的極速拼寫檢查引擎吧
    2026-04-04
  • Pytorch生成隨機數(shù)Tensor的方法匯總

    Pytorch生成隨機數(shù)Tensor的方法匯總

    這篇文章主要介紹了Pytorch生成隨機數(shù)Tensor的方法匯總,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • PyCharm如何導入python項目的方法

    PyCharm如何導入python項目的方法

    這篇文章主要介紹了PyCharm如何導入python項目的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • 基于Python實現(xiàn)人臉自動戴口罩系統(tǒng)

    基于Python實現(xiàn)人臉自動戴口罩系統(tǒng)

    2019年新型冠狀病毒感染的肺炎疫情發(fā)生以來,牽動人心,舉國哀痛,口罩、酒精、消毒液奇貨可居。這篇文章主要介紹了基于Python的人臉自動戴口罩系統(tǒng),需要的朋友可以參考下
    2020-02-02
  • Python創(chuàng)建文件夾與文件的快捷方法

    Python創(chuàng)建文件夾與文件的快捷方法

    這篇文章主要給大家介紹了關(guān)于Python創(chuàng)建文件夾與文件的快捷方法以及批量創(chuàng)建文件夾的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • python運行其他程序的實現(xiàn)方法

    python運行其他程序的實現(xiàn)方法

    這篇文章主要介紹了python運行其他程序的實現(xiàn)方法的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • Python OpenCV實現(xiàn)按照像素點圖片切割

    Python OpenCV實現(xiàn)按照像素點圖片切割

    本文將詳細介紹如何使用Python和OpenCV進行基于像素點的圖像分割,包括閾值分割,自適應閾值分割等,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-12-12
  • Python基于wxPython實現(xiàn)TodoList任務管理器開發(fā)詳解

    Python基于wxPython實現(xiàn)TodoList任務管理器開發(fā)詳解

    在日常工作和學習中,任務管理是提高效率的重要工具,本文將詳細介紹如何使用Python的wxPython GUI框架開發(fā)一個功能完善的TodoList任務管理器,下面我們就來看看具體實現(xiàn)方法吧
    2025-12-12
  • python獲得圖片base64編碼示例

    python獲得圖片base64編碼示例

    這篇文章主要介紹了用python語言獲得圖片的Base64編碼的示例,大家參考使用吧
    2014-01-01

最新評論

灌阳县| 溧水县| 丹凤县| 嘉义市| 库车县| 东山县| 库尔勒市| 大宁县| 贵定县| 林甸县| 龙海市| 麟游县| 丰原市| 闻喜县| 云和县| 茌平县| 宜都市| 东山县| 通化市| 康保县| 萨嘎县| 旬阳县| 华坪县| 甘洛县| 黔西县| 资中县| 绿春县| 泰和县| 台安县| 姚安县| 灌云县| 禄劝| 施秉县| 浦县| 右玉县| 宜川县| 泊头市| 茌平县| 开阳县| 中西区| 晋江市|