2010-11-08 9 views
15

क्या पाइथन में लैम्ब्डा फ़ंक्शन पर सजावट का उपयोग करने के लिए कोई वाक्यविन्यास है? उदाहरण:पाइथन में लैम्बडास पर सजावटी का उपयोग करना?

इस उत्पादन में
def simpledecorator(f): 
    def new_f(): 
     print "Using a decorator: " 
     f() 
    return new_f 

@simpledecorator 
def hello(): 
    print "Hello world!" 

परिणाम:

>>> hello() 
Using a simple decorator: 
Hello world! 

फिर भी जब मैं एक लैम्ब्डा के साथ एक ही कोशिश:

File "<stdin", line 2 
    f = lambda x: x * 2 
    ^
SyntaxError: invalid syntax 

मैं:

@anotherdecorator 
f = lambda x: x * 2 

मैं इस मिल ऐसा लगता है कि यह लैम्ब्स बनाने का एक अच्छा तरीका हो सकता है कथन को उनसे "इंजेक्शन" करने की अनुमति देकर अधिक बहुमुखी। लेकिन अगर ऐसी सुविधा मौजूद है, तो मुझे नहीं पता कि वाक्यविन्यास क्या है।

उत्तर

29
f = anotherdecorator(lambda x: x * 2) 
+5

बिल्कुल। और यह स्पष्ट है कि आप जानते हैं कि सजावटी कैसे काम करते हैं। यदि आप नहीं करते हैं, तो आप उन्हें लिखना नहीं चाहिए। – delnan

+1

मेरी इच्छा है कि मैंने पहले इसके बारे में सोचा था। यह स्थिति से बचता है कि 'सजावट' वाक्यविन्यास i.e. 'f = anotherdecorator (f)' से लड़ना चाहता है। फिर भी, यह एक बहुत उपयोगी भाषा सुविधा है। –

+5

'@' वाक्यविन्यास से पहले, ऐसा कुछ फ़ंक्शन (या कक्षा) को सजाने का मुख्य तरीका था। – martineau

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