亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

python裝飾器的寫法有哪些

發布時間:2020-11-06 09:43:53 來源:億速云 閱讀:189 作者:小新 欄目:編程語言

python裝飾器的寫法有哪些?這個問題可能是我們日常學習或工作經常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家帶來的參考內容,讓我們一起來看看吧!

裝飾器的示例代碼

# 定義裝飾器
def decorator(func):
    def inner():
        # 在內部函數里面對已有函數進行裝飾
        print('已添加登錄認證')
        func()
 
    return inner
 
 
def comment():
    print('發表評論')
 
 
# 調用裝飾器對已有函數進行裝飾,左邊的comment=inner
comment = decorator(comment)
 
# 調用方式不變
comment()

裝飾器的語法糖寫法

如果有多個函數都需要添加登錄驗證的功能,每次都需要編寫func = decorator(func)這樣代碼對已有函數進行裝飾,這種做法還是比較麻煩。

Python給提供了一個裝飾函數更加簡單的寫法,那就是語法糖,語法糖的書寫格式是: @裝飾器名字,通過語法糖的方式也可以完成對已有函數的裝飾。

# 定義裝飾器
def decorator(func):
    def inner():
        # 在內部函數里面對已有函數進行裝飾
        print('已添加登錄認證')
        func()
 
    return inner
 
 
@decorator  # comment = decorator(comment) 裝飾器語法糖對該代碼進行了封裝 左邊comment=inner
def comment():
    print('發表評論')
 
 
# 調用方式不變
comment()

裝飾器的執行時機

當前模塊加載完成以后,裝飾器會立即執行,對已有函數進行裝飾。

# 定義裝飾器
def decorator(func):
    print('裝飾器執行了')
 
    def inner():
        # 在內部函數里面對已有函數進行裝飾
        print('已添加登錄認證')
        func()
 
    return inner
 
 
@decorator  # comment = decorator(comment) 裝飾器語法糖對該代碼進行了封裝 左邊comment=inner
def comment():
print('發表評論')

運行結果

裝飾器執行了

1

裝飾器實現已有函數執行時間的統計

import time
 
 
def decorator(func):
    def inner():
        # 獲取時間距離1970-1-1 0:0:1的時間差
        begin = time.time()
        func()
        end = time.time()
        result = end - begin
        print(f'函數執行完成耗時:{result}')
 
    return inner
 
 
@decorator
def work():
    for i in range(10000):
        print(i)
 
 
work()

 裝飾帶有參數的函數

def decorator(func):
    def inner(num1, num2):
        print('正在努力執行加法計算')
        func(num1, num2)
 
    return inner
 
 
@decorator
def add_num(num1, num2):
    result = num1 + num2
    print(f'結果為:{result}')
 
 
add_num(1, 2)

 裝飾帶有參數、返回值的函數

def decorator(func):
    def inner(num1, num2):
        print('正在努力執行加法計算')
        num = func(num1, num2)
        return num
 
    return inner
 
 
@decorator
def add_num(num1, num2):
    result = num1 + num2
    return result
 
 
result = add_num(1, 2)
print(f'結果為:{result}')

類裝飾器的使用

class MyDecorator(object):
    def __init__(self, func):
        self.__func = func
 
    # 實現__call__方法,表示對象是一個可調用對象,可以像調用函數一樣進行調用
    def __call__(self, *args, **kwargs):
        # 對已有函數進行封裝
        print('馬上就有下班啦')
        self.__func()
 
 
@MyDecorator  # @MyDecorator => show = MyDecorator(show)
def show():
    print('快要下雪啦')
 
 
# 執行show,就相當于執行MyDecorator類創建的實例對象,show() => 對象()
show()

擴展:

函數之所以能夠調用,是因為函數內部實現了 __call__ 方法

感謝各位的閱讀!看完上述內容,你們對python裝飾器的寫法有哪些大概了解了嗎?希望文章內容對大家有所幫助。如果想了解更多相關文章內容,歡迎關注億速云行業資訊頻道。

向AI問一下細節

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

AI

大城县| 涪陵区| 芮城县| 崇义县| 丰城市| 连州市| 静乐县| 古蔺县| 宁城县| 吉首市| 周至县| 锦州市| 江油市| 龙江县| 青田县| 古丈县| 米易县| 呈贡县| 同心县| 新邵县| 开平市| 和平县| 西畴县| 沿河| 外汇| 方山县| 如东县| 武陟县| 玉山县| 古丈县| 岳池县| 金湖县| 曲松县| 慈利县| 淮滨县| 黔东| 临桂县| 临汾市| 遂溪县| 基隆市| 惠州市|