2012-05-28 4 views
2

먼저 파이썬 장식이 무엇인지, 어떻게 작동 하는지를 배웠습니다. 그리고 나는 같은 것을 할 싶습니다함수를 호출 할 때까지 데코레이터를 지연시킬 수 있습니까?

def age_over_18(go_enjoy_yourself): 

    def go_home_and_rethink_your_life(): 

     return 'So you should go home and rethink your life.' 

    return go_enjoy_yourself if age_stored_somewhere > 18 else go_home_and_rethink_your_life 

@age_over_18 
def some_porn_things(): 

    return '-Beep-' 

하지만 함수가 첫번째 실제로 아무것도하지 않는 것이 기능을 의미 파이썬, 읽을 때 장식이 실행되는 것을 발견했다.

나는 내가 좋아하는 뭔가를 쓸 수 있습니다 알고

def some_porn_things(): 

    if age_stored_somewhere > 18: 
     ... 
    else: 
     ... 

하지만 난 그냥 장식이 우아하고 이해하기 쉬운 생각, 그래서 질문은 :

는 내가 될 때까지 발생하는 장식을 지연 할 수 함수를 호출합니까?

+2

참고 : 장식자는 일반적으로 그렇게 만들지 않습니다. @DanielRoseman의 대답은 평소에 보았던 데코레이터의 유형입니다. – jamylak

답변

7

트릭은 체크가 내부 기능에서 일어나고 외부 기능에서는 일어나지 않도록하기위한 것입니다. 귀하의 경우 :

def age_over_18(go_enjoy_yourself): 
    def are_you_over_18(): 
     if age > 18: 
      return go_enjoy_yourself() 
     else: 
      return 'So you should go home and rethink your life.' 

    return are_you_over_18 
+0

감사합니다, 그것은 excatly 내가 무엇을 의미합니다! – Cauly

관련 문제