최근, 작은 파트너 인터뷰, 매우 흥미로운 질문을 충족 :
경우 참조 장식의 장식을 디자인하세요, 그것은 초는 매개 변수로 받아 들일 수 int를 필요로하는 모든 기능에 적용 할 수는 수행하는 데 필요한 실행 인쇄의 지정된 초보다 큰 시간의 함수를 수행하여 함수의 실행시의 이름을 변경.
인터뷰 전에 나는이 문제의 개발하자, higher-order 함수의 방법으로 달성하고, 지금 속히, 만났다가 발생했습니다.
먼저오고 분석 아래 :
인수 장식 1 -> higher-order 함수
2 실행 시간 -> 시간 라이브러리
코드에서 :
from functools import wraps
import time
# 面向对象写法
class TakeTime:
def __init__(self, para: int):
self.para = para
def __call__(self, func):
@wraps(func)
def wrapped(*args, **kwargs):
start_time = time.time()
name = func.__name__
func(*args, **kwargs)
count_time = time.time() - start_time
if self.para >= count_time:
print("the {name} take {time}, less time".format(name=name, time=count_time))
else:
print("the {name} take {time}, more time".format(name=name, time=count_time))
return func
return wrapped
# 常规写法
def func_time(para: int):
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
start_time = time.time()
name = func.__name__
func(*args, **kwargs)
count_time = time.time() - start_time
if para >= count_time:
print("the {name} take {time}, less time".format(name=name, time=count_time))
else:
print("the {name} take {time}, more time".format(name=name, time=count_time))
return func
return wrapper
return decorator
@TakeTime(10)
def log():
for x in range(10):
time.sleep(0.5)
@func_time(10)
def log1():
for x in range(10):
time.sleep(0.5)