日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Python中的Decorator裝飾器的使用示例_python

作者:漂泊的小森 ? 更新時間: 2022-12-28 編程語言

#最近在網上看代碼時,出現了@???的代碼,看了好久也不知道是什么意思,經過了解原來是裝飾器,我給大家舉個例子講解一下,幫助大家快速理解:

##大家在寫函數的時候,可能會想測試這個函數的運行時間,如果每個函數都加一個類似于:

start=time.time()
函數主體
over=time.time()
Time=over-start
print(Time)
def haha():
    start=time.time()
    for i in range(1200):
        if i%2==0:
            print('這是個偶數:',i)
    over=time.time()
    print("總共花費的時間:",over-start)
haha()

這樣函數的可讀性也不高,如果要測試好幾個函數還會大量浪費時間。

下面引入裝飾器:

1簡單的裝飾器操作:

(先定義一個函數1(里面傳遞一個參數),然后在函數1里面再定義一個函數2負責計算時間,并在時間中間調用定義函數1的參數,然后返回這個函數2):

!!!當我們想調用裝飾器時,只需@函數1的名字,放在想要使用的函數前面即可。

import time
def decorator(fun):
    def wrapper():
        t1=time.time()
        fun()
        t2=time.time()
        print('總共花費的時間:',t2-t1)
    return wrapper
@decorator
def haha():
    #start=time.time()
    for i in range(1200):
        if i%2==0:
            print('這是個偶數:',i)
    #over=time.time()
    #print("總共花費的時間:",over-start)
haha()

2,裝飾器升級版(如果我們想套用的函數中,具有返回對應的值這個功能共時使用):

例如這個函數:

def haha():
    a=0
    #start=time.time()
    for i in range(1200):
        if i%2==0:
            print('這是個偶數:',i)
            a=a+i
    return a

#我們如果還用1中的裝飾器就不能返回對應的值,這就需要改動裝飾器:

(在裝飾器中也要把函數中定義參數的返回值給表示出來,并且利用return 給返回值,輸出出來)

import time
def decorator1(fun):
    def wrapper2():
        t1=time.time()
        result=fun()
        t2=time.time()
        print('總共花費的時間:',t2-t1)
        return result
    return wrapper2
@decorator1
def haha():
    a=0
    #start=time.time()
    for i in range(1200):
        if i%2==0:
            print('這是個偶數:',i)
            a=a+i
    return a
    #over=time.time()
    #print("總共花費的時間:",over-start)
aaa=haha()
print(aaa)

可能有同學會問,為什么后面要用到aaa=haha(),

這是因為我們要接受返回值result,并將其用print()打印出來。

3,裝飾器的升級升級版(當我們需要使用的函數haha中,不但有返回值,還有傳入的參數時使用。)

(只需要在我們的函數2和調用的函數1中的參數()里面加上關鍵字傳參*args,即可)

import time
def decorator1(fun):
    def wrapper2(*args):
        t1=time.time()
        result=fun(*args)
        t2=time.time()
        print('總共花費的時間:',t2-t1)
        return result
    return wrapper2
@decorator1
def haha(key):
    a=0
    #start=time.time()
    for i in range(key):
        if i%2==0:
            print('這是個偶數:',i)
            a=a+i
    return a
    #over=time.time()
    #print("總共花費的時間:",over-start)
aaa=haha(1200)
print(aaa)

可不要忘了,調用函數haha時要傳入參數哦。

原文鏈接:https://blog.csdn.net/Superman980527/article/details/127593379

欄目分類
最近更新