2010-01-26 11 views
40

print(x) क्यों है निम्न सूची-समझ में वैध (SyntaxError) मान्य नहीं है?सूची समझ: यह एक वाक्यविन्यास त्रुटि क्यों है?

my_list=[1,2,3] 
[print(my_item) for my_item in my_list] 

विपरीत करने के लिए - निम्नलिखित में सिंटेक्स त्रुटि नहीं देता:

def my_func(x): 
    print(x) 
[my_func(my_item) for my_item in my_list] 

उत्तर

48

क्योंकि प्रिंट एक समारोह नहीं है, यह एक बयान है, और आप उन्हें भाव में नहीं हो सकता। यह और अधिक स्पष्ट हो जाता है, तो आप सामान्य अजगर 2 सिंटैक्स का उपयोग करें:

my_list=[1,2,3] 
[print my_item for my_item in my_list] 

वह बहुत सही नहीं लगती है। :) my_item चाल के चारों ओर कोष्ठक देता है।

यह पाइथन 3, बीटीडब्ल्यू में बदल गया है, जहां प्रिंट एक फ़ंक्शन है, जहां आपका कोड ठीक काम करता है।

+21

आप भविष्य में इस सुविधा आयात कर सकते हैं: '__future__ आयात print_function' –

+0

से @ THC4k - मैं मानता हूँ, यह कर देगा सुनिश्चित करें कि कोड * 2.6 और 3.0 –

+0

दोनों में संकलित किया जा सकता है, क्योंकि यह विशेष रूप से 2.6 का उल्लेख करता है, यह एक अच्छा बिंदु है। –

6

यह एक वाक्यविन्यास त्रुटि है क्योंकि print कोई फ़ंक्शन नहीं है। यह एक बयान है। जब से तुम स्पष्ट रूप से वापसी मान के बारे में print से परवाह नहीं है (क्योंकि यह कोई है), बस सामान्य पाश लिखें:

for my_item in my_list: 
    print my_item 
5

सूची समझ एक सूची बनाने के लिए डिजाइन किए हैं। तो इसके अंदर प्रिंट का उपयोग करने से कोई त्रुटि नहीं होगी, हम प्रिंट() या 2.7 या 3.x में प्रिंट का उपयोग करते हैं। कोड

[my_item for my_item in my_list] 

टाइप सूची की एक नई वस्तु बनाता है।

print [my_item for my_item in my_list] 

एक पूरी

के रूप में इस नई सूची से बाहर प्रिंट देखें: here

+2

* "कोई फर्क नहीं पड़ता कि हम प्रिंट का उपयोग() या 2.7 या 3.x में मुद्रित" * इस अजगर 2.x के लिए ही सच है, नहीं अजगर 3.x. '[abc"] में char के लिए [प्रिंट (char)] 'पायथन 3.x में वैध (लेकिन निराश) है – jDo

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