जवाबों:
3.0 से पहले पायथन संस्करणों में "सादे तार" और "यूनिकोड स्ट्रिंग्स" दो प्रकार के तार होते हैं। सादे तार ( str) लैटिन वर्णमाला के बाहर वर्णों का प्रतिनिधित्व नहीं कर सकते (सादगी के लिए कोड पृष्ठों की अनदेखी)। यूनिकोड स्ट्रिंग्स ( unicode) क्लिंगन जैसे कुछ काल्पनिक लोगों सहित किसी भी वर्णमाला के पात्रों का प्रतिनिधित्व कर सकता है।
तो दो प्रकार के तार क्यों होते हैं, क्या सिर्फ यूनिकोड के लिए बेहतर नहीं होगा क्योंकि इससे सभी मामलों को कवर किया जाएगा? वैसे केवल यूनिकोड होना बेहतर है लेकिन स्ट्रिंग्स का प्रतिनिधित्व करने के लिए यूनिकोड पसंदीदा तरीका होने से पहले ही पायथन बनाया गया था। कई उपयोगकर्ताओं के साथ एक भाषा में स्ट्रिंग प्रकार को संक्रमण करने में समय लगता है, पायथन 3.0 में अंत में यह मामला है कि सभी तार यूनीकोड हैं।
3.0 पूर्व पायथन तार की विरासत पदानुक्रम है:
object
|
|
basestring
/ \
/ \
str unicode
पायथन 2.3 में शुरू किए गए 'बेसरेस्ट्रिंग' को स्ट्रिंग यूनिफिकेशन की दिशा में एक कदम के रूप में सोचा जा सकता है क्योंकि इसका उपयोग यह जांचने के लिए किया जा सकता है कि क्या वस्तु एक उदाहरण है strयाunicode
>>> string1 = "I am a plain string"
>>> string2 = u"I am a unicode string"
>>> isinstance(string1, str)
True
>>> isinstance(string2, str)
False
>>> isinstance(string1, unicode)
False
>>> isinstance(string2, unicode)
True
>>> isinstance(string1, basestring)
True
>>> isinstance(string2, basestring)
True
basestringऔर strऔर bytesदोनों उपवर्ग objectसीधे। लेकिन ध्यान दें कि यह समझ में आता है, क्योंकि Py2 Py3 strके समान नहीं है bytes। basestring"चरित्र स्ट्रिंग" के रूप में सोचा जाना चाहिए, जिनमें से Py3 में केवल है str। इसलिए 2to3उपकरण के basestringसाथ बदल जाता है str।
सभी तार आधारभूत हैं, लेकिन यूनिकोड तार प्रकार के नहीं हैं। इसके बजाय यह प्रयास करें:
>>> a=u'aaaa'
>>> print isinstance(a, basestring)
True
>>> print isinstance(a, str)
False
वास्तव में आप जो पूछ रहे हैं, वह आधार और स्ट्रैस वर्ग के बीच का अंतर है।
Str एक वर्ग है जो बेसिस्टर से विरासत में मिला है। लेकिन यूनिकोड के तार भी मौजूद हैं, जैसे कि अन्य लोग, यदि आप एक बनाना चाहते हैं।
>>> a = u'aaaa'
>>> isinstance(a, str)
False
>>> isinstance(a, basestring)
True
strऔरbyteअभी भी बच्चे हैंbasestring? इस बारे में एक नोट जोड़ने लायक होगा।