2010-04-07 18 views
69

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

b"abcdef" 

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

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

+10

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

+0

लिंक एसएलओटी का इस्तेमाल एक संस्करण विनिर्देशक गायब है; यह पायथन 3 के बारे में है: https://docs.python.org/3/reference/lexical_analysis.html#string-literals। क्रॉस-वर्जन पायथन कोड की सुविधा के लिए उपसर्ग अब [पायथन 2.6 और ऊपर] (https://docs.python.org/2/whatsnew/2.6.html#pep-3112-byte-literals) में भी समर्थित है। –

+1

यह प्रश्न न तो "सटीक डुप्लिकेट" है और न ही प्रश्न का उत्तर है "क्या मैं अपने प्रिंट स्टेटमेंट में इस 'बी' चरित्र से छुटकारा पा सकता हूं?" http://stackoverflow.com/questions/42599851/can-i-get-rid-of-this-b-character-in-my-print-statement/42599902#42599902 क्या आप अनजान करना चाहते हैं कि कृपया मारिजिन? वह व्यक्ति जिसने वास्तव में उत्तर देने का प्रयास किया है, वह वास्तविक प्रश्न का उत्तर देने में सक्षम होने की सराहना कर सकता है। –

उत्तर

43

यह python3 bytesliteral है। यह उपसर्ग अजगर 2.5 में अनुपस्थित और पुराने है (यह 2.x के एक सादे स्ट्रिंग के बराबर है, जबकि 3.x के मैदान स्ट्रिंग 2.x में u उपसर्ग के साथ एक शाब्दिक के बराबर है)। पायथन 2.6+ में यह एक सादा स्ट्रिंग के बराबर है, for compatibility with 3.x

+0

@WRAR: पाइथन 2.6 कोड में मैंने देखा, ऐसा लगता है कि इसे python2.6 – kriss

+0

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

+1

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

55

b उपसर्ग एक bytes string literal का प्रतीक है।

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

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

क्योंकि एक bytes वस्तु पूर्णांकों का एक दृश्य से मिलकर बनता है, तो आप पूर्णांकों के किसी भी अन्य अनुक्रम से एक bytes वस्तु मूल्यों के साथ 0-255 रेंज में, एक सूची की तरह का निर्माण कर सकते हैं:

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

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

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

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

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

तुम भी निर्माता, उपयोग कर सकते हैं भी ऐसा ही करने के लिए।

दोनों डिकोडिंग और एन्कोडिंग विधियां specify how errors should be handled पर अतिरिक्त तर्क लेती हैं।

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

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