🐍Python深化(Decorator)
🐍Python深化(Decorator)
デコレーション特性
装飾の例
import time
def perf_clock(func):
def perf_clocked(*args):
# 시작시간
st = time.perf_counter()
result = func(*args)
# 종료시간
et = time.perf_counter() - st
# 함수명
name = func.__name__
# 매개변수
arg_str = ','.join(repr(arg) for arg in args)
# 출력
print('[%0.5fs] %s(%s) -> %r' % (et, name, arg_str, result))
return result
return perf_clocked
def time_func(seconds):
time.sleep(seconds)
def sum_func(*numbers):
return sum(numbers)
def fact_func(n):
return 1 if n < 2 else n * fact_func(n-1)
装飾品を使用しない例
non_deco1 = perf_clock(time_func)
non_deco2 = perf_clock(sum_func)
non_deco3 = perf_clock(fact_func)
non_deco1(2)
# [2.00034s] time_func(2) -> None
non_deco2(100, 200, 300, 400, 500)
# [0.00000s] sum_func(100,200,300,400,500) -> 1500
non_deco3(10)
# [0.00001s] fact_func(10) -> 3628800
アクセサリーの使用例
@perf_clock
def time_func(seconds):
time.sleep(seconds)
@perf_clock
def sum_func(*numbers):
return sum(numbers)
@perf_clock
def fact_func(n):
return 1 if n < 2 else n * fact_func(n-1)
作成したtime_func(2)
# [2.00027s] time_func(2) -> None
sum_func(10,20,30,40,50)
# [0.00000s] sum_func(10,20,30,40,50) -> 150
fact_func(10)
# [0.00000s] fact_func(1) -> 1
# [0.00001s] fact_func(2) -> 2
# [0.00002s] fact_func(3) -> 6
# [0.00005s] fact_func(4) -> 24
# [0.00005s] fact_func(5) -> 120
# [0.00006s] fact_func(6) -> 720
# [0.00007s] fact_func(7) -> 5040
# [0.00008s] fact_func(8) -> 40320
# [0.00009s] fact_func(9) -> 362880
# [0.00010s] fact_func(10) -> 3628800
アクセサリーの説明
装飾器は関数を囲む形で構成されています.したがって、他の機能を実装する場合、既存の関数を変更することなく、データレコーダが使用される.
ソース:https://dojang.io/mod/page/view.php?id=2427
Reference
この問題について(🐍Python深化(Decorator)), 我々は、より多くの情報をここで見つけました https://velog.io/@sdk1926/파이썬-심화데코레이터テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol