2012-08-28 12 views
37

में प्रिंट() (फ़ंक्शन संस्करण) का उपयोग करके मैं एक कथन और अभिव्यक्ति के बीच अंतर को समझता हूं, और मैं समझता हूं कि Python3 ने एक फ़ंक्शन में प्रिंट() को बदल दिया है।Python2.x

हालांकि मैंने विभिन्न पायथन 2.एक्स दुभाषियों पर ब्रांडेसिस से घिरा एक प्रिंट() कथन चलाया और यह निर्दोष रूप से भाग गया, मुझे किसी भी मॉड्यूल को आयात करने की भी आवश्यकता नहीं थी।

मेरा प्रश्न: क्या निम्न कोड print("Hello SO!") को Python2.x में एक कथन या अभिव्यक्ति के रूप में मूल्यांकन किया गया है?

उत्तर

38

पर विचार करें निम्नलिखित भाव:

a = ("Hello SO!") 
a = "Hello SO!" 

वे बराबर कर रहे हैं। इसी तरह, एक बयान के साथ:

statement_keyword("foo") 
statement_keyword "foo" 

समकक्ष भी हैं।

सूचना है कि अगर आप अपना प्रिंट समारोह बदलने के लिए:

print("Hello","SO!") 

आप अजगर 2 के साथ अजगर 2 और अजगर 3. के बीच एक अंतर पर ध्यान देंगे, (...,...) प्रिंट के बाद से एक टपल के रूप में interpteted है एक बयान है जबकि पायथन 3 में, यह कई तर्कों के साथ एक फ़ंक्शन कॉल है।

इसलिए, हाथ में सवाल का जवाब देने, print अजगर 2.x में एक बयान के रूप में मूल्यांकन किया जाता है जब तक आप from __future__ import print_function

+0

... जब तक कि आपने '__future__ आयात प्रिंट_फंक्शन' से या जो भी कहा जाता है, तब तक नहीं किया। – delnan

+0

Python3 में __future__ आयात print_function चोट से उपयोग करेगा? यह एक आयात त्रुटि नहीं देता है। – sgoblin

+1

@sgoblin - नहीं। '__future__' मॉड्यूल gurantees कि कुछ भी कभी से हटा दिया जाएगा। यह python3.x – mgilson

2

यह अभी भी एक बयान के रूप में मूल्यांकन किया गया है, आप बस ("Hello SO!") प्रिंट कर रहे हैं, जो कि "Hello SO!" का मूल्यांकन करता है क्योंकि यह एक tuple (जैसा कि delnan द्वारा उल्लिखित) नहीं है।

+3

और स्पष्ट होना, '(" हैलो अतः! ")' वास्तव में 'के बराबर है' - यह एक टपल नहीं है "नमस्ते अतः!"। – delnan

+0

धन्यवाद @ डेलनान, मैंने 1-तत्व टुपल्स के बारे में एक अच्छा जवाब पोस्ट करने से पहले आपकी टिप्पणी सही देखी। –

+2

और 1-टुपल बनाने के लिए, डेलन की टिप्पणी पर विस्तार करने के लिए, आपको एक अल्पविराम (उदा। '("हैलो एसओ!",)') – mgilson

12

print("Hello SO!") (अजगर 2.6 से प्रारंभ) बयान print ("Hello SO!"), जहां के लिए तर्क के रूप में मूल्यांकन किया जाता है print कथन ("Hello SO!") अभिव्यक्ति है।

यदि आप एक से अधिक मूल्य प्रिंट कर रहे हैं तो इससे कोई फर्क पड़ सकता है; उदाहरण के लिए print("Hello", "world") दो स्ट्रिंग्स "Hello" और "world" के बजाय 2-तत्व ट्यूपल ('Hello', 'world') प्रिंट करेगा।

अजगर 3 उपयोग from __future__ import print_function साथ संगतता के लिए:

>>> print("Hello", "world") 
('Hello', 'world') 
>>> from __future__ import print_function 
>>> print("Hello", "world") 
Hello world 
+0

पर प्रभावी रूप से नो-ऑप है यदि आप python2.5 और python3.x के साथ संगत होना चाहते हैं तो आप स्ट्रिंग इंटरपोलेशन का उपयोग कर सकते हैं (हालांकि मुझे नहीं लगता कि बहुत से लोग इन दिनों वकालत कर रहे हैं ...) – mgilson

+4

यह भी काफी दिलचस्प है। ध्यान दें कि यदि आप इसे एक स्क्रिप्ट में डालते हैं, तो यह असफल हो जाएगा क्योंकि फ़ाइल की शुरुआत में '__future__' आयात होना चाहिए, लेकिन कुछ गहरे अजगर जादू से, यह इंटरैक्टिव दुभाषिया में काम करता है। – mgilson

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