2012-10-14 7 views

उत्तर

25

एक त्रुटि है, क्योंकि पेट के बाद आप वापसी मान डाल करने के लिए है, इसलिए:

def f(): 
    return pass 

कि वास्तव में कोई मतलब नहीं है और एक SyntaxError के रूप में पैदा करता है:

lambda: pass 

के बराबर है कुंआ।

+0

ऐसे स्पष्ट, सटीक जवाब। धन्यवाद :) – Rez

28

लैम्बडास में केवल अभिव्यक्ति हो सकती है - मूल रूप से, कुछ असाइनमेंट स्टेटमेंट के दाईं ओर दिखाई दे सकता है। pass अभिव्यक्ति नहीं है - यह किसी मान का मूल्यांकन नहीं करता है, और a = pass कभी कानूनी नहीं होता है।

def f(): 
    return pass 

कौन सा मतलब नहीं है:

, यह है के बारे में सोच क्योंकि lambdas परोक्ष उनके शरीर के परिणाम लौटने का एक और तरीका, lambda: pass वास्तव में के बराबर है। अगर आपको किसी कारण से नो-ऑप लैम्ब्डा की ज़रूरत है, तो इसके बजाय lambda: None करें।

+2

यह समझ में आता है, धन्यवाद! लेकिन फिर, चूंकि 'लैम्ब्डा: कोई भी' अभी भी कोई मान नहीं देता है, क्या कोई तरीका है कि मैं एक अनाम फ़ंक्शन को परिभाषित कर सकता हूं जो वास्तव में 'def f(): pass' जैसा व्यवहार करता है? – Rez

+16

@ इसे रीज़ करें * वास्तव में वही है - सभी पायथन फ़ंक्शन एक मान लौटाते हैं; अगर वे अंत से गिर जाते हैं, या नंगे 'वापसी' तक पहुंचते हैं, तो वे 'कोई नहीं' वापस लौटते हैं। – lvc

4

return कथन के बिना किसी फ़ंक्शन का वापसी मान None है। आप सरल pass समारोह है कि ओपी में परिभाषित किया गया है से देख सकते हैं:

>>> def f(): 
...  pass 
... 
>>> print f() 
None 

आप देख रहे हैं एक लैम्ब्डा समारोह है कि यह "नो-सेशन" समारोह के बराबर है के लिए है, तो आप उपयोग कर सकते हैं:

lambda: None 

उदाहरण के लिए:

>>> f = lambda: None 
>>> print f() 
None 
संबंधित मुद्दे