2009-12-21 18 views
8

पायथन 2.6 में, निम्न पंक्ति क्यों मान्य है?सिंटेक्स क्विर्क या वह मान्य पायथन

my_line = 'foo' 'bar' 

और है कि यदि मान्य है, यही कारण है कि निम्नलिखित नहीं है:

my_list = 1 2 

पहला उदाहरण है स्ट्रिंग संयोजन, तथापि, निम्नलिखित मान्य या तो है (धन्यवाद भगवान):

foo = 'foo' 
bar = 'bar' 
foo_bar = foo bar 
+1

मैं करता हूँ पर तार के साथ जोड़ दिया होने की अनुमति देता सफेद रिक्त स्थान को "हटाने" में बिंदु नहीं देखते हैं क्योंकि आपका 'my_list = 1 2' उदाहरण सुझाव देता है। – jldupont

+0

यह सुझाव नहीं देता है। मेरा सुझाव है कि पायथन वाक्यविन्यास का यह पहलू असंगत है (imho)। –

+3

इस पीईपी http://www.python.org/dev/peps/pep-3126/ देखें जहां इसकी व्यापक चर्चा की गई है। – stephan

उत्तर

20

यह string literal concatenation कर रहा है।

यह सुविधा की जरूरत बैकस्लैश का संख्या को कम करने के लिए इस्तेमाल किया जा सकता है, लंबे तार विभाजित करने के लिए लंबे समय तक लाइनों भर में आसानी से, या यहाँ तक भागों में टिप्पणियां जोड़ने के लिए: जैसा कि दस्तावेज में बताया गया है, फायदे निम्नलिखित शामिल तार के ...

यह ध्यान रखें कि इस संयोजन संकलन समय बजाय बार चलाने पर किया जाता है पर चला जाता है।

इस के पीछे इतिहास और तर्क, और सुविधा को हटाने के लिए एक अस्वीकार सुझाव, PEP 3126 में वर्णित है।

8

my_line = 'foo' 'bar' स्ट्रिंग concatenation है।

+3

अभी भी पायथन 3.1 में काम करता है लेकिन मैं इसे बहुत नापसंद करता हूं। –

+0

@Ipthnc मुझे भी। सौभाग्य से मैं इस तरह से लिखे गए कोड में नहीं आया हूं, और मुझे उम्मीद है कि मुझे कभी नहीं करना होगा ... मुझे यकीन है कि मैं भूल जाऊंगा कि बिल्ली का मतलब क्या है! –

+0

यह उपयोगी हो सकता है जब "ऑटो-जनरेटिंग" कोड लेकिन इससे अलग, मैं लाभ (यदि कोई हो) देखने में विफल रहता हूं। – jldupont

5

यह असंगत नहीं है। स्ट्रिंग्स और इंटीग्रर्स के पास अलग-अलग तरीके हैं।

इंटीजर concatenation अर्थहीन है।

स्ट्रिंग concatenation एक सार्थक डिफ़ॉल्ट व्यवहार है।

6

शायद यह सी के पूर्वजों का है। सी में, निम्न पूरी तरह से वैध है:

char* ptr = "hello " "world"; 

यह सी pre-processor (cpp) द्वारा कार्यान्वित किया जाता है, और तर्क यह है कि कड़ी में दी गई है:

इस लंबी तार कई लाइनों पर विभाजित किया जा करने की अनुमति देता , और भी स्ट्रिंग सी से उत्पन्न पूर्वप्रक्रमक परिभाषित करता है और मैक्रो शाब्दिक संकलन समय

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