티스토리 뷰



아래와 같이 출력했을 때 count_prime 이 아니라 wrapper 가 출력된다.


데코레이션으로 속성이 바뀌었다.



def get_delay(tp):
def decorator(func):
def wrapper(*args, **kwargs):
import time
start = time.time()
r = func(*args, **kwargs)
print("{}(): delay={}".format(func.__name__, tp(time.time()-start)))
return r
return wrapper
return decorator


def is_prime(n):
for i in range(2, n):
if not n % i:
return False
return True


@get_delay(float)
def count_prime(n):
c = 0
for i in range(2, n+1):
if is_prime(i):
c += 1
return c


print(count_prime.__name__)




wrapper 함수 위에 다음과 같이 추가해 주자

   @wraps(func)


functools 에 wraps 를 추가하는것도 잊지 말자



전체 코드는 아래와 같고 여기서 __name__ 을 출력했을 때는 count_prime 이 출력되는것을 확인 할수 있다.



from functools import wraps


def get_delay(tp):
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
import time
start = time.time()
r = func(*args, **kwargs)
print("{}(): delay={}".format(func.__name__, tp(time.time()-start)))
return r
return wrapper
return decorator


def is_prime(n):
for i in range(2, n):
if not n % i:
return False
return True


@get_delay(float)
def count_prime(n):
c = 0
for i in range(2, n+1):
if is_prime(i):
c += 1
return c


print(count_prime.__name__)


댓글