データレコーダ
Pythonのデコレーションの作成と使い方を整理します.
装飾師
パラメータとして関数を受け入れる関数!
ソース関数を変更せずに前後に新しい論理を追加する新しい関数を作成する 関数もオブジェクトなので、関数オブジェクトのアドレスをパラメータとして他の関数に渡すことができます.戻りも関数
ex)レコーダ関数で既存の関数をパラメータとして受け入れる レコーダ関数で新しい関数を定義-->既存の関数を変更せずに新機能を作成できる 回車可能新関数
上の画像の左側の方法もレコーダを使用する別の方法です.
最後に、クラスとして作成し、アクセサリーを使用することもできます.
https://wikidocs.net/23106
https://dojang.io/mod/page/view.php?id=2427
https://bluese05.tistory.com/30
装飾師
パラメータとして関数を受け入れる関数!
デコレーション
ex)
import time
def make_time_checker(func):
def new_func(*args, **kwargs):
start_time = time.perf_counter()
result = func(*args, **kwargs)
end_time = time.perf_counter()
print('실행시간:', end_time - start_time)
return result
return new_func
@make_time_checker
def big_number(n):
return n ** n ** n
@make_time_checker
def big_number2(n):
return (n+1) ** (n+1) ** (n+1)
実行時間をチェックする関数をレコーダなしと書く場合は、実行するたびに同じタスクをすべての関数の先頭と末尾に配置する必要がありますが、レコーダを使用すると操作を簡略化できます.@decorator
レコーダを使用できます.上の画像の左側の方法もレコーダを使用する別の方法です.
最後に、クラスとして作成し、アクセサリーを使用することもできます.
import datetime
class DatetimeDecorator:
def __init__(self, f):
self.func = f
def __call__(self, *args, **kwargs):
print datetime.datetime.now()
self.func(*args, **kwargs)
print datetime.datetime.now()
class MainClass:
@DatetimeDecorator
def main_function_1():
print "MAIN FUNCTION 1 START"
@DatetimeDecorator
def main_function_2():
print "MAIN FUNCTION 2 START"
@DatetimeDecorator
def main_function_3():
print "MAIN FUNCTION 3 START"
my = MainClass()
my.main_function_1()
my.main_function_2()
my.main_function_3()
リファレンス
https://wikidocs.net/23106
https://dojang.io/mod/page/view.php?id=2427
https://bluese05.tistory.com/30
Reference
この問題について(データレコーダ), 我々は、より多くの情報をここで見つけました https://velog.io/@gnlenfn/파이썬-데코레이터テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol