यह काम क्यों नहीं करता है?
lambda: print "x"
क्या यह एक कथन नहीं है, या यह कुछ और है? एक मेमने में अनुमति दी गई है पर प्रलेखन थोड़ा विरल लगता है ...
यह काम क्यों नहीं करता है?
lambda: print "x"
क्या यह एक कथन नहीं है, या यह कुछ और है? एक मेमने में अनुमति दी गई है पर प्रलेखन थोड़ा विरल लगता है ...
जवाबों:
एक lambda
शरीर की एक ही अभिव्यक्ति होनी चाहिए । पायथन 2.x में, print
एक बयान है। हालाँकि, पायथन 3 में, print
एक फंक्शन है (और एक फंक्शन एप्लिकेशन एक एक्सप्रेशन है, इसलिए यह एक लैम्ब्डा में काम करेगा)। अगर आप नवीनतम पायथन 2.x का उपयोग कर रहे हैं, तो आप (और आगे की संगतता के लिए) बैक-पोर्टेड प्रिंट फ़ंक्शन का उपयोग कर सकते हैं।
In [1324]: from __future__ import print_function
In [1325]: f = lambda x: print(x)
In [1326]: f("HI")
HI
from __future__ import print_function
कोड की शुरुआत में क्यों होना चाहिए? thx
print()
में अंतर्निहित विधि है।
ऐसे मामलों में जहां मैं इसे सरल स्टबिंग के लिए उपयोग कर रहा हूं मैं इसका उपयोग करता हूं:
fn = lambda x: sys.stdout.write(str(x) + "\n")
जो पूरी तरह से काम करता है।
आपने जो लिखा है वह उसके बराबर है
def anon():
return print "x"
जिसके परिणामस्वरूप सिंटेक्सएर्रर भी होता है, अजगर आपको 2.xx में प्रिंट करने के लिए एक मान प्रदान नहीं करता है; python3 में आप कह सकते हैं
lambda: print('hi')
और यह काम करेगा क्योंकि उन्होंने एक बयान के बजाय एक फ़ंक्शन होने के लिए प्रिंट बदल दिया है।
from __future__ import print_function
, जो इस py2.x में सक्षम बनाता है
lambda: sys.stdout.write('hi')
एक लंबोदर के शरीर को एक अभिव्यक्ति होना चाहिए जो एक मूल्य लौटाता है। print
, एक बयान होने के नाते, कुछ भी वापस नहीं करता है, यहां तक कि नहीं भी None
। इसी तरह, आप print
एक चर का परिणाम नहीं दे सकते हैं :
>>> x = print "hello"
File "<stdin>", line 1
x = print "hello"
^
SyntaxError: invalid syntax
आप एक लैम्बडा में वैरिएबल असाइनमेंट भी नहीं डाल सकते, क्योंकि असाइनमेंट स्टेटमेंट हैं:
>>> lambda y: (x = y)
File "<stdin>", line 1
lambda y: (x = y)
^
SyntaxError: invalid syntax
आप ऐसा कुछ कर सकते हैं।
प्रिंट स्टेटमेंट को एक फंक्शन में बदलने के लिए एक फंक्शन बनाएं:
def printf(text):
print text
और इसे प्रिंट करें:
lambda: printf("Testing")
def printf(fmt, *args): print(fmt % args)
पाइथन 3.x के साथ, प्रिंट कैन लैम्बडा में काम कर सकते हैं, लैम्बडा के शब्दार्थ को बदले बिना।
डिबगिंग के लिए एक विशेष तरीके से उपयोग किया जाता है। मैं यह 'देर से जवाब' पोस्ट करता हूं, क्योंकि यह एक व्यावहारिक चाल है जिसका मैं अक्सर उपयोग करता हूं।
मान लीजिए कि आपका 'अनइंस्टाल्ड' लंबोदर है:
lambda: 4
तब आपका 'वाद्य' लंबोदर है:
lambda: (print (3), 4) [1]