एक अजगर स्ट्रिंग से पहले अब उपसर्ग का क्या मतलब है?


107

एक अजगर स्रोत कोड में मैं पर एक स्ट्रिंग से पहले मैं एक छोटा सा बी देखा है पर ठोकर खाई :

b"abcdef"

मैं uएक यूनिकोड स्ट्रिंग को इंगित करने वाले उपसर्ग के बारे में जानता हूं , औरr कच्चे स्ट्रिंग शाब्दिक के लिए उपसर्ग।

किस bतरह के और किस तरह के स्रोत कोड के लिए यह उपयोगी है क्योंकि यह बिना किसी उपसर्ग के एक सादे स्ट्रिंग की तरह प्रतीत होता है?


10
@SLott: आपके द्वारा दिए गए लिंक का अनुसरण करें आप देखेंगे कि बी उपसर्ग को स्ट्रिंग उपसर्ग में अनुमति नहीं है ... 2.6 के लिए (संदर्भ सामग्री में एक छोटी सी त्रुटि की तरह दिखता है)। और इस तरह की चीजों के बारे में गुगली करना आसान नहीं है। मैंने "बी अजगर स्ट्रिंग उपसर्ग" जैसे कीवर्ड की कोशिश की और मूल रूप से कहीं नहीं मिला।
क्रिस्स

लिंक S.Lott का उपयोग एक संस्करण विनिर्देशक को याद कर रहा है; यह पायथन 3: docs.python.org/3/reference/… के बारे में है । उपसर्ग अब पायथन 2.6 और क्रॉस-संस्करण पायथन कोड की सुविधा के लिए भी समर्थित है ।
मार्टिज़न पीटर

1
यह प्रश्न न तो "एक सटीक डुप्लिकेट" है और न ही इस प्रश्न का उत्तर है "क्या मैं अपने प्रिंट स्टेटमेंट में इस 'बी' चरित्र से छुटकारा पा सकता हूं?" stackoverflow.com/questions/42599851/… क्या आप यह चिन्हित करना चाहेंगे कि कृपया मेराजीन? जो व्यक्ति और साथ ही साथ उस व्यक्ति ने पूछा जिसने वास्तव में उत्तर देने का प्रयास किया है, वह सराहना कर सकता है कि वह वास्तविक प्रश्न का उत्तर दे सकता है।
me_

जवाबों:


62

यह पायथन 3 bytes शाब्दिक है । यह उपसर्ग पायथन 2.5 और पुराने में अनुपस्थित है (यह 2.x के एक सादे स्ट्रिंग के बराबर है, जबकि 3.x का सादा स्ट्रिंग u2.x में उपसर्ग के साथ एक शाब्दिक के बराबर है )। पाइथन 2.6+ में यह 3.x के साथ संगतता के लिए , एक सादे स्ट्रिंग के बराबर है ।


@ आरएआर: अजगर के 2.6 कोड में था, मैंने इसे देखा, ऐसा लगता है कि इसे अजगर 2.6 में पेश किया गया था
क्रिश

मैंने विशेष रूप से पोस्ट करने से पहले 2.6 संदर्भ में इसकी जाँच की: docs.python.org/reference/lexical_analysis.html#literals
wRAR

1
ठीक है, "भविष्य की अनुकूलता के लिए, पायथन 2.6 बाइट्स को स्ट्रैस प्रकार के पर्यायवाची के रूप में जोड़ता है, और यह" व्हाट्स न्यू "से बी '' नोटेशन" का भी समर्थन करता है।
wrar

जैसा कि ऊपर दिए गए लिंक अब 2.7 संदर्भ और b उपसर्ग को इंगित करते हैं, यहाँ पुराने bogus संदर्भ docs.python.org/release/2.6.8/reference/…
kriss

98

bउपसर्ग एक प्रतीक bytesस्ट्रिंग शाब्दिक

यदि आप इसे पायथन 3 स्रोत कोड में उपयोग करते देखते हैं, तो अभिव्यक्ति एक bytesऑब्जेक्ट बनाता है , न कि एक यूनिकोड strऑब्जेक्ट । यदि आप इसे अपने पायथन शेल में या सूची के भाग के रूप में, तानाशाह या अन्य कंटेनर सामग्री में गूँजते हुए देखते हैं, तो आप bytesइस अंकन का उपयोग करते हुए एक वस्तु को देखते हैं ।

bytesऑब्जेक्ट में मूल रूप से 0-255 की सीमा में पूर्णांक का एक अनुक्रम होता है, लेकिन जब प्रतिनिधित्व किया जाता है, तो पायथन इन बाइट्स को ASCII कोडपॉइंट्स के रूप में प्रदर्शित करता है ताकि उनकी सामग्री को पढ़ना आसान हो सके। बाहर किसी भी बाइट्स प्रिंट करने योग्य ASCII वर्ण की सीमा से बच दृश्यों (जैसे के रूप में दिखाया जाता है \n, \x82, आदि)। इसके विपरीत, आप बाइट मान को परिभाषित करने के लिए ASCII वर्ण और एस्केप अनुक्रम दोनों का उपयोग कर सकते हैं; ASCII मूल्यों के लिए उनके संख्यात्मक मान का उपयोग किया जाता है (जैसे b'A'==)b'\x41' )

क्योंकि किसी bytesऑब्जेक्ट में पूर्णांकों का अनुक्रम होता है, तो आप bytes0-255 रेंज में मानों के साथ पूर्णांक के किसी अन्य अनुक्रम से किसी ऑब्जेक्ट का निर्माण कर सकते हैं , जैसे कि सूची:

bytes([72, 101, 108, 108, 111])

और अनुक्रमण आपको पूर्णांक वापस देता है (लेकिन स्लाइसिंग एक नया bytesमान पैदा करता है ; उपरोक्त उदाहरण के लिए;value[0] आप देता है 72, लेकिन value[:1]है b'H'के रूप में 72 बड़े अक्षर के लिए ASCII कोड बिंदु है एच )।

bytesमॉडल बाइनरी डेटा , सहित एन्कोडेड पाठ । यदि आपके bytesमान में पाठ है, तो आपको सही कोडेक का उपयोग करके, पहले इसे डिकोड करना होगा। यदि डेटा को UTF-8 के रूप में एन्कोड किया गया है, उदाहरण के लिए, आप इसके साथ एक यूनिकोड strमान प्राप्त कर सकते हैं :

strvalue = bytesvalue.decode('utf-8')

इसके विपरीत, एक strवस्तु में पाठ से जाने के लिए bytesआपको सांकेतिक शब्दों में बदलना चाहिए । आपको उपयोग करने के लिए एन्कोडिंग पर निर्णय लेने की आवश्यकता है; डिफ़ॉल्ट UTF-8 का उपयोग करना है, लेकिन आपको जो उपयोग करने की आवश्यकता होगी वह आपके उपयोग के मामले पर अत्यधिक निर्भर है:

bytesvalue = strvalue.encode('utf-8')

आप कंस्ट्रक्टर का भी उपयोग कर सकते हैं, bytes(strvalue, encoding) ऐसा ही करने के लिए।

डिकोडिंग और एन्कोडिंग दोनों तरीके यह निर्दिष्ट करने के लिए एक अतिरिक्त तर्क लेते हैं कि त्रुटियों को कैसे नियंत्रित किया जाना चाहिए

पायथन 2, संस्करण 2.6 और 2.7 भी b'..'स्ट्रिंग शाब्दिक सिंटैक्स का उपयोग करके स्ट्रिंग शाब्दिक बनाने का समर्थन करते हैं , पायथन 2 और 3 दोनों पर काम करने वाले कोड को कम करने के लिए।

bytesऑब्जेक्ट अपरिवर्तनीय हैं, जैसे strस्ट्रिंग्स हैं। एक bytearray()वस्तु का उपयोग करें यदि आपको एक पारस्परिक बाइट्स मान की आवश्यकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.