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

詳解Python實現同時支持帶調用和不調用帶裝飾器

 更新時間:2023年06月13日 11:28:13   作者:臨淵  
一般來說,不帶參數裝飾器,再使用時不加括號,帶參數的裝飾器使用時必須加括號,這篇文章主要介紹了Python實現同時支持帶調用和不調用帶裝飾器的相關知識,需要的朋友可以參考下

一般來說,不帶參數裝飾器,再使用時不加括號,帶參數的裝飾器使用時必須加括號。例如

  • 不帶參裝飾器
def info(func):  # 裝飾器,參數接收一個函數,返回一個函數
    @functools.wraps(func)
    def wrapper(*args, **kwargs):   # 與原函數功能一致,支持任意參數
        print(f'調用函數: {func.__name__} 參數:{args} {kwargs}')
        return func(*args, **kwargs)   # 內部包裹調用原函數
    return wrapper  # 返回和原函數功能一致的函數
@info   # 使用時不加括號
def add(a, b):
    return a + b
  • 帶參數的裝飾器(返回裝飾器的函數)
def info(show_result=True):
    def _info(func):  # 裝飾器,參數接收一個函數,返回一個函數
        @functools.wraps(func)
        def wrapper(*args, **kwargs):  # 與原函數功能一致,支持任意參數
            print(f'調用函數: {func.__name__} 參數:{args} {kwargs}')
            start_time = time.time()
            result = func(*args, **kwargs)  # 內部包裹調用原函數
            if show_result is True:
                print(f'調用結果: {result} 耗時: {time.time()-start_time}')
            return result
        return wrapper  # 返回替換后的新函數
    return _info
@info()  # 即使使用默認參數也必須加括號調用(因為調用后才能得到裝飾器)
def add(a, b):
    return a + b

注意: 帶參數裝飾器雖然通過參數支持定制,但是使用時必須加括號,用戶很容易遺漏或分不清是否需要加括號

能不能像@pytest.fixture那樣,既可以不帶參數,也可以帶參數使用呢,例如:

import pytest
@pytest.fixture
def a(): ...
@pytest.fixture()
def b(): ...
@pytest.fixture(scope='module')
def c(): ...

這就要求,我們裝飾器外部函數,即可以本身作為一個裝飾器(接收一個原函數,返回一個同功能函數),也可以根據參數調用后返回一個裝飾器,實現如下:

def info(func=None, show_result=False):  # 第一個參數為函數
    def _info(func):  # 裝飾器,參數接收一個函數,返回一個函數
        @functools.wraps(func)
        def wrapper(*args, **kwargs):  # 與原函數功能一致,支持任意參數
            print(f'調用函數: {func.__name__} 參數:{args} {kwargs}')
            start_time = time.time()
            result = func(*args, **kwargs)  # 內部包裹調用原函數
            if show_result is True:
                print(f'調用結果: {result} 耗時: {time.time()-start_time}')
            return result
        return wrapper  # 返回替換后的新函數
    if func is not None:  # 不帶括號(作為裝飾器)使用時
        return _info(func)  # 返回 同功能函數wrapper(即_info的調用結果)
    return _info  # 否則,帶括號調用(作為返回裝飾器的函數)使用時,返回裝飾器 _info
@info  # 即使使用默認參數也必須加括號調用(因為調用后才能得到裝飾器)
def add(a, b):
    return a + b
@info()
def sub(a, b):
    return a - b
@info(show_result=True)
def mul(a, b):
    return a * b

注意:1. 在使用裝飾器info()不能手動指定第一個參數func=...
2. 在指定參數時,只能按key=value形式給出

到此這篇關于Python實現同時支持帶調用和不調用帶裝飾器的文章就介紹到這了,更多相關python帶調用和不調用帶裝飾器內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 使用Python實現圖像LBP特征提取的操作方法

    使用Python實現圖像LBP特征提取的操作方法

    LBP特征叫做局部二值模式,常用于紋理特征提取,并在紋理分類中具有較強的區(qū)分能力,本文給大家介紹了如何使用Python實現圖像LBP特征提取的操作方法,需要的朋友可以參考下
    2025-04-04
  • python操作SqlServer獲取特定表的所有列名(推薦)

    python操作SqlServer獲取特定表的所有列名(推薦)

    這篇文章主要介紹了python操作SqlServer獲取特定表的所有列名,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • 基于python實現自動化辦公學習筆記(CSV、word、Excel、PPT)

    基于python實現自動化辦公學習筆記(CSV、word、Excel、PPT)

    這篇文章主要介紹了基于python實現自動化辦公學習筆記,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08
  • Python之指數與E記法的區(qū)別詳解

    Python之指數與E記法的區(qū)別詳解

    今天小編就為大家分享一篇Python之指數與E記法的區(qū)別詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • pytest allure添加環(huán)境信息實例講解

    pytest allure添加環(huán)境信息實例講解

    這篇文章主要介紹了pytest allure添加環(huán)境信息實例,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12
  • 使用python?AI快速比對兩張人臉圖像及遇到的坑

    使用python?AI快速比對兩張人臉圖像及遇到的坑

    這篇文章主要介紹了如何使用python?AI快速比對兩張人臉圖像?實現過程比較簡單,但是第三方python依賴的安裝過程較為曲折,下面是通過實踐對比總結出來的能夠支持的幾個版本,避免大家踩坑,需要的朋友可以參考下
    2023-02-02
  • Django如何防止定時任務并發(fā)淺析

    Django如何防止定時任務并發(fā)淺析

    這篇文章主要給大家介紹了關于Django如何防止定時任務并發(fā)的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Django具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-05-05
  • python網絡通信圖文詳解

    python網絡通信圖文詳解

    這篇文章主要介紹了Python網絡編程詳解,涉及具體代碼示例,還是挺不錯的,這里分享給大家,供需要的朋友參考,希望能給你帶來幫助
    2021-08-08
  • python構造icmp echo請求和實現網絡探測器功能代碼分享

    python構造icmp echo請求和實現網絡探測器功能代碼分享

    本文分享了二個python示例,python構造icmp echo請求、實現網絡探測器功能代碼,類似nmap功能
    2014-01-01
  • python的類變量和成員變量用法實例教程

    python的類變量和成員變量用法實例教程

    這篇文章主要介紹了python的類變量和成員變量用法,是學習Python程序設計所必須牢固掌握的,需要的朋友可以參考下
    2014-08-08

最新評論

广安市| 灵石县| 城市| 北辰区| 泰安市| 外汇| 平顶山市| 百色市| 崇礼县| 英山县| 额敏县| 无为县| 大新县| 吉木乃县| 肇州县| 色达县| 循化| 江永县| 呼和浩特市| 株洲市| 文昌市| 天台县| 锡林郭勒盟| 白水县| 治多县| 鄂温| 伊吾县| 萨迦县| 民勤县| 巨鹿县| 赤峰市| 五台县| 东平县| 白河县| 简阳市| 吉水县| 德阳市| 兴安县| 遂昌县| 玉溪市| 武平县|