2016-10-12 3 views
2

나는이 다음 코드 : 그러나파이썬 장식 로거

def log(func): 
    def wrapper(*args, **kwargs): 
     func_str = func.__name__ 
     args_str = ', '.join(args) 
     kwargs_str = ', '.join([':'.join([str(j) for j in i]) for i in kwargs.iteritems()]) 
     with open('log.txt', 'w') as f: 
      f.write(func_str) 
      f.write(args_str) 
      f.write(kwargs_str) 
     return func(*args, **kwargs) 
    return wrapper() 


@log 
def example(a, b): 
    print('example') 

, 심지어 어떤 함수를 호출하지 않고, 내가 여전히 오류가 발생합니다 :

TypeError: example() takes exactly 2 arguments (0 given) 

이런 일이 발생하는 이유 누군가가 나에게 설명 할 수 있기 때문에 함수가 호출 된 것 같지만 왜 이해가되지 않습니다.

답변

3

당신은 그것을 호출하지 않고 wrapper 기능을 반환해야합니다 :

return wrapper 

호출이는 것을 의미 wrapper에 대한 호출을 평가해야합니다. 이제까지 잘못된 서명으로 부름했습니다.

4

하면 여기를 호출하기 때문에 :

return wrapper() 

그것은해야한다 :

return wrapper 
+0

그랬습니다! 참으로 이제는 예와 비교해 보았습니다. –