2017-04-12 3 views
11
def makebold(fn): 
    def wrapped(): 
     return "<b>" + fn() + "</b>" 
    return wrapped 

def makeitalic(fn): 
    def wrapped(): 
     return "<i>" + fn() + "</i>" 
    return wrapped 

@makeitalic 
@makebold 
def hello(): 
    return "hello world" 

print(hello()) ## returns "<b><i>hello world</i></b>" 

이 코드에서는 makeitalic()과 makebold() 함수를 정의하고 hello 함수를 전달하는 것이 어떻겠습니까?파이썬 장식과 함수 전달하기

여기에 뭔가가 누락되었거나 더 복잡한 작업을 위해 데코레이터가 실제로 더 좋습니까?

답변

8

이 코드에서는 makeitalic() 및 makebold() 함수를 정의하고 hello 함수를 전달하는 것이 어떻습니까?

확실히 할 수 있습니다! 장식자는 단지 통사론적인 설탕입니다. 후드에서 무슨 일입니다 :

@makeitalic 
@makebold 
def hello(): 
    return "hello world" 

가된다 :

def hello(): 
    return "hello world" 

hello = makebold(hello) 
hello = makeitalic(hello) 
+0

덕분에,이 경우 불필요한 보인다. 나는 그들이 다른 유스 케이스에서 concision을 제공 할 것이라고 확신한다. –