2017-04-12 9 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>" 

इस कोड में, केवल फ़ंक्शन मेइटाइटलिक() और मेकबॉल्ड() को परिभाषित न करें और फ़ंक्शन हैलो में क्यों पास करें?पाइथन सजावट बनाम फ़ंक्शन

क्या मुझे यहां कुछ याद आ रही है या सजावटी वास्तव में अधिक जटिल चीजों के लिए बेहतर हैं?

उत्तर

8

इस कोड में, क्यों न केवल मेकटाइटलिक() और मेकबॉल्ड() कार्यों को परिभाषित करें और फ़ंक्शन हैलो में पास करें?

आप निश्चित रूप से कर सकते थे! सजावटी सिर्फ वाक्य रचनात्मक चीनी हैं। हुड के अंतर्गत, क्या होता है:

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

हो जाता है:

def hello(): 
    return "hello world" 

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

धन्यवाद, इस मामले में अनावश्यक लगता है। मुझे यकीन है कि वे अन्य उपयोग मामलों में सहमति प्रदान करते हैं। –

संबंधित मुद्दे