Pythonで装飾モードを実現する3つの方法
機能ターゲット
被装飾関数名、実行時間、メモリアドレスを印刷できる装飾器を作成する
プリ依存パッケージ
import time import functools from decorator import decorator
通常の関数に基づいてネスト
@decoratorベース
@functoolsの使用
テスト
異なる実装に切り替えると、彼らの効果は同じです.
被装飾関数名、実行時間、メモリアドレスを印刷できる装飾器を作成する
プリ依存パッケージ
import time import functools from decorator import decorator
通常の関数に基づいてネスト
> def log1(fn):
def _wrapper(*args, **kwargs):
start = time.clock()
result = fn(*args, **kwargs)
print("%s is invoked with time consumed: %s seconds at address %s" % (fn.__name__, str(time.time() - start), id(fn)))
return result
return _wrapper
@decoratorベース
@decorator
def log(f, *args, **kwargs):
start = time.time()
result = f(*args, **kwargs)
print("%s is invoked with time consumed: %s at address %s" % (f.__name__, str(time.time() - start), id(f)))
return result
@functoolsの使用
def log2(f):
@functools.wraps(f)
def wrapper(*args, **kwargs):
start = time.clock()
result = f(*args, **kwargs)
print("%s is invoked with time consumed: %s seconds at address %s" % (f.__name__, str(time.time() - start), id(f)))
return result
return wrapper
テスト
@log2
def f11(x, y):
return x**y
result = f11(2,3)
print("result:" + str(result))
異なる実装に切り替えると、彼らの効果は同じです.