2009-12-30 18 views
127
a='aaaa' 
print isinstance(a, basestring)#true 
print isinstance(a, str)#true 

उत्तर

320

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 
+64

+1 अच्छा ascii ग्राफ ;-) – ChristopheD

+7

अजगर 3 में यह परिवर्तन किया है? क्या नया 'str' और' बाइट' अभी भी 'बेसस्टिंग' के बच्चे हैं? इसके बारे में एक नोट जोड़ने लायक होगा। – MestreLion

+2

+1। प्रोग्रामिंग पृष्ठभूमि के बिना उन लोगों के लिए अच्छी व्याख्या जो पाइथन के साथ काम करने और काम करने की कोशिश कर रहे हैं (मुझे शामिल है)। – RubenGeert

8

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

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

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

4

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

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

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