पायथन 3.x प्रकारों के बीच एक स्पष्ट अंतर बनाता है:
str= '...'शाब्दिक = यूनिकोड वर्णों का एक क्रम (UTF-16 या UTF-32, यह निर्भर करता है कि पायथन कैसे संकलित किया गया था)
bytes= b'...'शाब्दिक = सप्तक का एक क्रम (0 और 255 के बीच पूर्णांक)
यदि आप Java या C # से परिचित हैं, तो strजैसा Stringऔर bytesजैसा सोचें byte[]। यदि आप SQL से परिचित हैं, तो strजैसा NVARCHARऔर bytesजैसा BINARYया वैसा समझें BLOB। यदि आप Windows रजिस्ट्री से परिचित हैं, तो strजैसा REG_SZऔर bytesजैसा सोचें REG_BINARY। यदि आप C (++) से परिचित हैं, तो आपके द्वारा सीखे गए charऔर तार के बारे में सब कुछ भूल जाएं , क्योंकि एक CHARACTER एक BYTE नहीं है । यह विचार लंबे समय से पुराना है।
strजब आप पाठ का प्रतिनिधित्व करना चाहते हैं तो आप उपयोग करते हैं।
print('שלום עולם')
आप का उपयोग bytesजब आप structs की तरह निम्न स्तर बाइनरी डेटा का प्रतिनिधित्व करना चाहते हैं।
NaN = struct.unpack('>d', b'\xff\xf8\x00\x00\x00\x00\x00\x00')[0]
आप कर सकते हैं सांकेतिक शब्दों में बदलना एक strएक करने के लिए bytesवस्तु।
>>> '\uFEFF'.encode('UTF-8')
b'\xef\xbb\xbf'
और आप एक bytesमें एक डिकोड कर सकते हैं str।
>>> b'\xE2\x82\xAC'.decode('UTF-8')
'€'
लेकिन आप स्वतंत्र रूप से दो प्रकारों का मिश्रण नहीं कर सकते।
>>> b'\xEF\xBB\xBF' + 'Text with a UTF-8 BOM'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can't concat bytes to str
b'...'अंकन कुछ हद तक में भ्रमित यह 0x01-0x7F बाइट्स हेक्स संख्या के बजाय ASCII वर्ण साथ निर्दिष्ट किया जा करने की अनुमति देता है कि है।
>>> b'A' == b'\x41'
True
लेकिन मुझे जोर देना चाहिए, एक चरित्र बाइट नहीं है ।
>>> 'A' == b'A'
False
पायथन में 2.x
पायथन के पूर्व 3.0 संस्करणों में पाठ और बाइनरी डेटा के बीच इस तरह के अंतर का अभाव था। इसके बजाय, वहाँ था:
unicode= u'...'शाब्दिक = यूनिकोड वर्णों का क्रम = 3.xstr
str= '...'शाब्दिक = भ्रमित बाइट्स / वर्णों के अनुक्रम
- आमतौर पर पाठ, कुछ अनिर्दिष्ट एन्कोडिंग में एन्कोडेड।
- लेकिन
struct.packआउटपुट जैसे बाइनरी डेटा का प्रतिनिधित्व करने के लिए भी उपयोग किया जाता है ।
2.x-to-3. -x संक्रमण को कम करने के लिए, पाठ के तार (जो 3 में होना चाहिए) में b'...'द्विआधारी तारों (जो bytes3.x में होना चाहिए ) को अलग करने की अनुमति देने के लिए शाब्दिक वाक्यविन्यास पायथन 2.6 को वापस भेज दिया गया था। str।एक्स)। bउपसर्ग 2.x में कुछ नहीं करता है, लेकिन बताता 2to3स्क्रिप्ट यह 3.x. में एक यूनिकोड स्ट्रिंग के लिए कनवर्ट करने के लिए नहीं
तो हाँ, b'...'पायथन में शाब्दिक का वही उद्देश्य है जो वे PHP में करते हैं।
इसके अलावा, बस जिज्ञासा से बाहर, क्या बी और यू की तुलना में अधिक प्रतीक हैं जो अन्य चीजें करते हैं?
rउपसर्ग एक कच्चे स्ट्रिंग बनाता है (उदाहरण के लिए, r'\t'एक बैकस्लैश + है tबजाय एक टैब), और ट्रिपल कोट्स '''...'''या """..."""बहु लाइन स्ट्रिंग शाब्दिक अनुमति देते हैं।