2011-10-11 20 views
35
primes = [2,3,5,7..] (prime numbers) 
map(lambda x:print(x),primes) 

यह कुछ भी प्रिंट नहीं करता है। वह क्यों है? मैंप्रिंट मानचित्र पर होने पर प्रिंट नहीं करता है, पायथन

sys.stdout.write(x) 

भी कोशिश की है, लेकिन या तो काम नहीं करता।

+0

पायथन 2 या पायथन 3? –

+4

यह पाइथन 2 में एक वाक्यविन्यास त्रुटि है, इसलिए मुझे पाइथन 3. –

उत्तर

56

lambda x: print(x) के बाद से अजगर < 3 में एक सिंटैक्स त्रुटि है, मैं अजगर 3. इसका मतलब है कि map एक जनरेटर देता है, नक्शा प्राप्त करने के लिए वास्तव में एक सूची के प्रत्येक तत्व पर समारोह कॉल करने के लिए अर्थ यह सोचते हैं रहा हूँ, आप के माध्यम से पुनरावृति करने की जरूरत है परिणामी जनरेटर।

सौभाग्य से, यह आसानी से किया जा सकता है:

list(map(lambda x:print(x),primes)) 

ओह, और आप लैम्ब्डा की भी छुटकारा पा सकते हैं, यदि आप चाहें:

list(map(print,primes)) 

लेकिन, उस बिंदु पर आप बेहतर कर रहे हैं दे प्रिंट के साथ बंद इसे संभाल:

print(*primes, sep='\n') 

नोट: मैंने पहले कहा था कि '\n'.join एक अच्छा विचार होगा। यह केवल str की सूची के लिए सच है।

+2

लगता है यह अभी भी एक बहुत बुरा विचार है (गैर-मूर्खतापूर्ण, स्पष्ट नहीं - मानचित्र, फ़िल्टर, सूची समझ, इत्यादि गणना के लिए हैं, साइड इफेक्ट्स के लिए नहीं) हालांकि। आपको केवल लूप, या 'प्रिंट (* प्राइम्स, सीईपी =' \ n ')', या 'प्रिंट (' \ n'.join (str (x) pr में x के लिए उपयोग करना चाहिए))। – delnan

+0

'प्रिंट (x)' पायथन में एक वाक्यविन्यास त्रुटि नहीं है <3. संपादित करें: क्षमा करें, यह इस प्रश्न में वाक्यविन्यास त्रुटि है। – utdemir

+1

@utdemir: 'लैम्ब्डा' या किसी अन्य अभिव्यक्ति में होने पर, यह (माता-पिता के साथ या बिना) होता है। मुझे लगता है कि ओपी का मतलब है कि और आप सिर्फ शब्द पर नाइटपिक करना चाहते हैं;) – delnan

5

यह मेरे लिए काम करता है:

>>> from __future__ import print_function 
>>> map(lambda x: print(x), primes) 
2 
3 
5 
7 
17: [None, None, None, None] 

आप पायथन 2.x उपयोग कर रहे हैं, जहां प्रिंट एक बयान, नहीं एक समारोह है?

+1

यह विशेष रूप से काम करता है क्योंकि आप पाइथन 2 का उपयोग कर रहे हैं। पायथन 3 में, यह नहीं है। और ओपी 3x का उपयोग करने की अधिक संभावना है क्योंकि 'प्रिंट' का उपयोग फ़ंक्शन के रूप में किया जाता है और चूंकि 'sys.stdout.write'" काम नहीं करता है "। – delnan

+0

आप वास्तव में लैम्बडा फ़ंक्शन को परिभाषित किए बिना सीधे 'मानचित्र (प्रिंट, प्राइम्स) 'कर सकते हैं। – hitzg

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