python - पायथन में x='y' 'z' के हुड के नीचे क्या है?




string syntax (2)

कुछ भी निष्पादित करने से पहले अजगर पार्सर द्वारा तारों को समतल किया जा रहा है, इसलिए इसका वास्तव में 'y' + 'z' या ''.join('y','z') जैसा नहीं है, सिवाय इसके कि इसका एक ही प्रभाव हो।

यदि आप पायथन में x = 'y' 'z' चलाते हैं, तो आपको 'yz' x सेट मिलता है, जिसका अर्थ है कि पायथन एक-दूसरे के बगल में कई तारों को देखता है, तो किसी प्रकार का स्ट्रिंग संघनन हो रहा है।

लेकिन यह किस तरह का संघटन है? क्या यह वास्तव में 'y' + 'z' चल रहा है या यह ''.join('y','z') या कुछ और चल रहा है?


पायथन पार्सर एक स्ट्रिंग के रूप में व्याख्या करता है । यह लेक्सिकल विश्लेषण दस्तावेज में अच्छी तरह से प्रलेखित है:

स्ट्रिंग शाब्दिक संयोजन

एकाधिक आसन्न स्ट्रिंग शाब्दिक (व्हाट्सएप द्वारा सीमांकित), संभवतः अलग-अलग उद्धरण सम्मेलनों का उपयोग करने की अनुमति है, और उनका अर्थ उनके संयोजन के समान है। इस प्रकार, "hello" 'world' "helloworld" बराबर है।

संकलित पायथन कोड सिर्फ एक स्ट्रिंग ऑब्जेक्ट देखता है; आप इस तरह के तार का एक एएसटी का उत्पादन करने के लिए पायथन से पूछकर इसे देख सकते हैं:

>>> import ast
>>> ast.dump(ast.parse("'hello' 'world'", mode='eval').body)
"Str(s='helloworld')"

वास्तव में, यह एएसटी के निर्माण का एक बहुत ही कार्य है, जो parsestrplus() ट्रिगर करता है, क्योंकि पार्स ट्री का पता parsestrplus() जाता है, एएसटी सी स्रोत में parsestrplus() फ़ंक्शन देखें।

फ़ीचर विशेष रूप से बैकस्लैश की आवश्यकता को कम करने के उद्देश्य से है; एक तार्किक रेखा के भीतर होने पर भौतिक रेखाओं में एक स्ट्रिंग को तोड़ने के लिए इसका उपयोग करें:

print('Hello world!', 'This string is spans just one '
      'logical line but is broken across multiple physical '
      'source lines.')

कई भौतिक रेखाएं संक्षेप में कोष्ठक, वर्ग कोष्ठक या घुंघराले ब्रेसिज़ का उपयोग करके एक भौतिक रेखा में शामिल हो सकती हैं

इस स्ट्रिंग संघटन सुविधा को C से कॉपी किया गया था, लेकिन Guido van Rossum इसे पायथन में जोड़कर पछतावा कर रही है । उस पोस्ट ने एक लंबे और बहुत दिलचस्प धागे को लात मारी, जिसमें फीचर को पूरी तरह से हटाने के लिए बहुत समर्थन था।





python-internals