a='aaaa'
print isinstance(a, basestring)#true
print isinstance(a, str)#true
उत्तर
3.0 से पहले पायथन संस्करणों में दो प्रकार के तार "सादे तार" और "यूनिकोड तार" हैं। सादा तार (str
) लैटिन वर्णमाला के बाहर वर्णों का प्रतिनिधित्व नहीं कर सकते हैं (सादगी के लिए कोड पृष्ठों के विवरण को अनदेखा कर सकते हैं)। यूनिकोड स्ट्रिंग्स (unicode
) क्लिंगन जैसे कुछ काल्पनिक लोगों सहित वर्णमाला से वर्णों का प्रतिनिधित्व कर सकते हैं।
तो दो प्रकार के तार क्यों हैं, क्या यह सिर्फ यूनिकोड के लिए बेहतर नहीं होगा क्योंकि इससे सभी मामलों को शामिल किया जाएगा? वैसे यह केवल यूनिकोड होना बेहतर है लेकिन यूनिकोड स्ट्रिंग का प्रतिनिधित्व करने के लिए पसंदीदा तरीका था इससे पहले पायथन बनाया गया था। पाइथन 3.0 में कई उपयोगकर्ताओं के साथ स्ट्रिंग प्रकार को एक भाषा में बदलने में समय लगता है, अंततः यह मामला है कि सभी तार यूनिकोड हैं।
अजगर तार के वंशानुगत पदानुक्रम पूर्व 3.0 है:
object
|
|
basestring
/\
/ \
str unicode
'basestring' अजगर 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
सभी तार बेसस्टरी हैं, लेकिन यूनिकोड स्ट्रिंग प्रकार str नहीं हैं। इसके बजाय इसे आजमाएं:
>>> a=u'aaaa'
>>> print isinstance(a, basestring)
True
>>> print isinstance(a, str)
False
बेसस्ट्रिंग स्ट्रिंग का सुपरक्लास है। आपके उदाहरण में, एक प्रकार "str" प्रकार है, यह एक बेसस्ट्रिंग दोनों है, और एक str
वास्तव में आप जो पूछ रहे हैं वह बेसस्ट्रिंग और स्ट्र क्लास के बीच का अंतर है।
स्ट्र एक वर्ग है जो बेसस्टर से विरासत में मिलता है। लेकिन यूनिकोड स्ट्रिंग भी मौजूद हैं, जैसे कि आप एक बनाना चाहते हैं।
>>> a = u'aaaa'
>>> isinstance(a, str)
False
>>> isinstance(a, basestring)
True
+1 अच्छा ascii ग्राफ ;-) – ChristopheD
अजगर 3 में यह परिवर्तन किया है? क्या नया 'str' और' बाइट' अभी भी 'बेसस्टिंग' के बच्चे हैं? इसके बारे में एक नोट जोड़ने लायक होगा। – MestreLion
+1। प्रोग्रामिंग पृष्ठभूमि के बिना उन लोगों के लिए अच्छी व्याख्या जो पाइथन के साथ काम करने और काम करने की कोशिश कर रहे हैं (मुझे शामिल है)। – RubenGeert