Pythonは時間がかかるメソッドを記録するためにデコレータを使用します

アイデア

Python はデコレータを使用してメソッドの消費時間を記録します。その目的は、各メソッドの実行の前後に一時変数を作成することなく、メソッドが実行されるたびにメソッドの消費時間を記録できることです。消費時間を記録します。

方法 1 (推奨されません):

各メソッドの実行前後に、消費時間を記録するための一時変数を作成します コードは次のとおりです メソッドが 10 個または 100 個ある場合、メソッドを 10 回または 100 回書かないといけないのが欠点ですか? このように書くと、何かを見逃しやすく、冗長すぎます。

def fun():
	# 开始计时
    start_time = time.time()
	# 模拟耗时
    time.sleep(2)
    
    # 停止计时
    end_time = time.time()
    print("fun01执行喽")

方法 2 (推奨):

時間のかかる記録にデコレータを使用する利点は、記録する必要があるメソッドの前にデコレータをマークすることは、このメソッドを別のメソッドに渡すことと同じであることです。メソッド A にメソッド B (通称:入れ子人形) を実行させます。
この利点は、アノテーションを作成するだけで済み、記録する必要がある時間のかかるメソッドの内容を変更する必要がないことです。これにより、エラーと冗長性が削減されます。コードは次のとおりです。

import time
# 使用装饰器,记录方法执行耗时
def timer(method_name):
    def decorator(func):
        def wrapper(*args, **kwargs):
            # 开始计时
            start_time = time.time()

            # 执行方法
            result = func(*args, **kwargs)

            # 停止计时
            end_time = time.time()

            # 统计耗时并输出
            execution_time = end_time - start_time
            log = "{} 执行耗时: {:.2f} 秒".format(method_name, execution_time)
            print(log)
            return result

        return wrapper

    return decorator

# 方法1 使用装饰器标注
@timer("fun01()")
def fun01():
	# 模拟耗时
    time.sleep(2)
    print("fun01执行喽")

# 方法2 不使用任何标注
def fun02():
	# 模拟耗时
	time.sleep(1)
    print("fun02执行喽")

# 方法3 使用装饰器标注
@timer("fun03()")
def fun03():
	# 模拟耗时
    time.sleep(3)
    print("fun03执行喽")


# 顺序执行fun01、02和03
fun01()
fun02()
fun03()

コードは直接実行され、次の出力が表示されます。
1. fun01() "実行" を出力しますが、2 秒間スリープし、デコレータを使用するため、出力時間は 2.01 秒です。
2. Fun02()の「実行中」は出力されますが、メソッドの実行時間を記録する「デコレータ」を使用していないため、実行時間が記録されません。
3. Fun03() は「実行」を出力しますが、3 秒間スリープし、デコレータを使用するため、出力時間は 3.00 秒です。
ここに画像の説明を挿入します

整理するのは簡単ではありません!

のように!注意してください!

おすすめ

転載: blog.csdn.net/qq_40600379/article/details/132262733