2017-10-15 2 views
-2

저는 파이썬에서 데코레이터를 이해하려고합니다.왜이 python 데코레이터가 작동하지 않습니까?

def decorator(func): 
    def logger(*args, **kwargs): 
     print "start logging" 
     func(*args, **kwargs) 
     print "end logging" 
    return logger 

@decorator 
def add(a,b): 
    return a+b 

을 내가 add(2,3)를 호출하면 출력 될 것입니다 : 그러나

start logging 
end logging 

을 내가 logger의 정의에 return func(*args, **kwargs)을 내 코드를 수정하고 작성하는 경우 다음이 작동하지 않는 이유를 이해가 안 돼요 작동하지만 그 다음 end logging은 출력에 기록되지 않습니다.

+3

'return' 할 때 함수가 끝납니다 ... 함수를 호출 한 결과를 * * print * * 다음에 반환합니다. – jonrsharpe

+1

'logger' 함수는'func'의 값을 반환해야하지만, 끝까지 끝낼 수는 없습니다. 이제 조금 생각해보십시오. 어떻게'func' 호출의 결과를 저장할 수 있습니까? 나중에 다시 돌려 줄 수 있을까요? –

답변

4

할 수 있습니다 캡처 반환 변수에 값을 인쇄 한 후 반환 :

def decorator(func): 
    def logger(*args, **kwargs): 
     print "start logging" 
     result = func(*args, **kwargs) 
     print "end logging" 
     return result 
    return logger 

장식 여기에 특별하지 않습니다; 다른 함수를 호출하는 함수 일뿐입니다.

관련 문제