आइंस्टीन ('आआ', बेसिस्ट्रिंग) और आइंस्टीनस ('आआ', स्ट्र) के बीच अंतर क्या है?


जवाबों:


387

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

13
क्या पायथन 3 में यह बदलाव आया? क्या नए strऔर byteअभी भी बच्चे हैं basestring? इस बारे में एक नोट जोड़ने लायक होगा।
MestreLion

14
@MestreLion: यह बदल गया; Py3 नहीं है basestringऔर strऔर bytesदोनों उपवर्ग objectसीधे। लेकिन ध्यान दें कि यह समझ में आता है, क्योंकि Py2 Py3 strके समान नहीं है bytesbasestring"चरित्र स्ट्रिंग" के रूप में सोचा जाना चाहिए, जिनमें से Py3 में केवल है str। इसलिए 2to3उपकरण के basestringसाथ बदल जाता है str
सोरेन लोर्बोर्ग

8

सभी तार आधारभूत हैं, लेकिन यूनिकोड तार प्रकार के नहीं हैं। इसके बजाय यह प्रयास करें:

>>> a=u'aaaa'
>>> print isinstance(a, basestring)
True
>>> print isinstance(a, str)
False

4

वास्तव में आप जो पूछ रहे हैं, वह आधार और स्ट्रैस वर्ग के बीच का अंतर है।

Str एक वर्ग है जो बेसिस्टर से विरासत में मिला है। लेकिन यूनिकोड के तार भी मौजूद हैं, जैसे कि अन्य लोग, यदि आप एक बनाना चाहते हैं।

>>> a = u'aaaa'
>>> isinstance(a, str)
False
>>> isinstance(a, basestring)
True

1

बेसस्ट्रिंग स्ट्रिंग का सुपरक्लास है। आपके उदाहरण में, "स्ट्र" का एक प्रकार इस प्रकार है, यह एक आधार है, और एक str है

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