강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

Zetta Kim님의 프로필 이미지
Zetta Kim

작성한 질문수

우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)

일급함수 - 데코레이터(4-2)

Chapter05-04 : sum_func의 합이 이중 출력됩니다.

작성

·

13

0

안녕하세요. 강사님.

Chapter05-04 : sum_func의 합이 이중 출력됩니다.(합 1500이 두 번 출력)

def perf_clock(func): # func가 free vatiable
    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

---------------------------------------- Called None Decorator -> sum_func [0.00001s] sum_func(100, 200, 300, 400, 500) -> 1500

1500

아무리 봐도 이유를 모르겠습니다.

제가 작성한 코드 지우고 강사님이 제공한 코드로 실행해도 동일합니다.

 

 

 

답변 2

1

좋은사람님의 프로필 이미지
좋은사람
지식공유자

두 번 출력되는 이유는 데코레이터가 함수의 실행 결과를 print 하고,
return 되는 함수를 다시 출력해서 그렇습니다.

즉, 데코레이터 + 함수 리턴 이중 출력됩니다.

데코레이터 내부 print 문을 주석 처리 또는 return 을 없이 처리하셔도 됩니다.

 

0

Zetta Kim님의 프로필 이미지
Zetta Kim
질문자

답변 감사합니다^^

Zetta Kim님의 프로필 이미지
Zetta Kim

작성한 질문수

질문하기