एक पाइथन नौसिखिया प्रश्न, यह वाक्यविन्यास अमान्य क्यों है: lambda: pass
, जबकि यह: def f(): pass
सही है?पायथन: लैम्ब्डा फॉर्म में पास स्टेटमेंट
आपकी अंतर्दृष्टि के लिए धन्यवाद।
एक पाइथन नौसिखिया प्रश्न, यह वाक्यविन्यास अमान्य क्यों है: lambda: pass
, जबकि यह: def f(): pass
सही है?पायथन: लैम्ब्डा फॉर्म में पास स्टेटमेंट
आपकी अंतर्दृष्टि के लिए धन्यवाद।
एक त्रुटि है, क्योंकि पेट के बाद आप वापसी मान डाल करने के लिए है, इसलिए:
def f():
return pass
कि वास्तव में कोई मतलब नहीं है और एक SyntaxError
के रूप में पैदा करता है:
lambda: pass
के बराबर है कुंआ।
लैम्बडास में केवल अभिव्यक्ति हो सकती है - मूल रूप से, कुछ असाइनमेंट स्टेटमेंट के दाईं ओर दिखाई दे सकता है। pass
अभिव्यक्ति नहीं है - यह किसी मान का मूल्यांकन नहीं करता है, और a = pass
कभी कानूनी नहीं होता है।
def f():
return pass
कौन सा मतलब नहीं है:
, यह है के बारे में सोच क्योंकि lambdas परोक्ष उनके शरीर के परिणाम लौटने का एक और तरीका, lambda: pass
वास्तव में के बराबर है। अगर आपको किसी कारण से नो-ऑप लैम्ब्डा की ज़रूरत है, तो इसके बजाय lambda: None
करें।
यह समझ में आता है, धन्यवाद! लेकिन फिर, चूंकि 'लैम्ब्डा: कोई भी' अभी भी कोई मान नहीं देता है, क्या कोई तरीका है कि मैं एक अनाम फ़ंक्शन को परिभाषित कर सकता हूं जो वास्तव में 'def f(): pass' जैसा व्यवहार करता है? – Rez
@ इसे रीज़ करें * वास्तव में वही है - सभी पायथन फ़ंक्शन एक मान लौटाते हैं; अगर वे अंत से गिर जाते हैं, या नंगे 'वापसी' तक पहुंचते हैं, तो वे 'कोई नहीं' वापस लौटते हैं। – lvc
return
कथन के बिना किसी फ़ंक्शन का वापसी मान None
है। आप सरल pass
समारोह है कि ओपी में परिभाषित किया गया है से देख सकते हैं:
>>> def f():
... pass
...
>>> print f()
None
आप देख रहे हैं एक लैम्ब्डा समारोह है कि यह "नो-सेशन" समारोह के बराबर है के लिए है, तो आप उपयोग कर सकते हैं:
lambda: None
उदाहरण के लिए:
>>> f = lambda: None
>>> print f()
None
ऐसे स्पष्ट, सटीक जवाब। धन्यवाद :) – Rez