पायथन 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'...'
द्विआधारी तारों (जो bytes
3.x में होना चाहिए ) को अलग करने की अनुमति देने के लिए शाब्दिक वाक्यविन्यास पायथन 2.6 को वापस भेज दिया गया था। str
।एक्स)। b
उपसर्ग 2.x में कुछ नहीं करता है, लेकिन बताता 2to3
स्क्रिप्ट यह 3.x. में एक यूनिकोड स्ट्रिंग के लिए कनवर्ट करने के लिए नहीं
तो हाँ, b'...'
पायथन में शाब्दिक का वही उद्देश्य है जो वे PHP में करते हैं।
इसके अलावा, बस जिज्ञासा से बाहर, क्या बी और यू की तुलना में अधिक प्रतीक हैं जो अन्य चीजें करते हैं?
r
उपसर्ग एक कच्चे स्ट्रिंग बनाता है (उदाहरण के लिए, r'\t'
एक बैकस्लैश + है t
बजाय एक टैब), और ट्रिपल कोट्स '''...'''
या """..."""
बहु लाइन स्ट्रिंग शाब्दिक अनुमति देते हैं।