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

Antwort

320

In Python-Versionen vor 3.0 gibt es zwei Arten von Strings "plain strings" und "unicode strings". Einfache Zeichenfolgen (str) können keine Zeichen außerhalb des lateinischen Alphabets darstellen (die Details von Codepages werden zur Vereinfachung ignoriert). Unicode-Zeichenfolgen (unicode) können Zeichen aus jedem Alphabet darstellen, einschließlich einiger fiktiver Zeichen wie Klingonisch.

Warum also zwei Arten von Strings, wäre es nicht besser, nur Unicode zu haben, da das alle Fälle abdecken würde? Nun, es ist besser, nur Unicode zu haben, aber Python wurde erstellt, bevor Unicode die bevorzugte Methode zur Darstellung von Strings war. Es braucht Zeit, um den String-Typ in eine Sprache mit vielen Benutzern zu überführen, in Python 3.0 ist es schließlich der Fall, dass alle Strings Unicode sind.

Die Vererbungshierarchie von Python Strings Pre-3.0 ist:

  object 
      | 
      | 
     basestring 
      /\ 
     / \ 
     str unicode 

‚basestring‘ in Python eingeführt 2.3 kann in Richtung der Zeichenfolge Einigung als Schritt betrachtet werden, wie es verwendet werden kann, um zu überprüfen, ob ein Objekt eine Instanz von str oder 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 für die schöne ascii graph ;-) – ChristopheD

+7

Hat diese Änderung in Python 3? Sind die neuen 'str' und' byte' noch Kinder von 'basestring'? Es wäre eine Anmerkung wert. – MestreLion

+2

+1. Nette Erklärung für diejenigen ohne Programmierhintergründe, die versuchen, Python zu verstehen und mit ihm arbeiten zu lassen (schließt mich ein). – RubenGeert

8

Alle Strings sind Basestrings, aber Unicode Strings sind nicht vom Typ str. Versuchen Sie dies stattdessen:

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

Basestring ist die Oberklasse der Zeichenfolge. In Ihrem Beispiel ist ein is vom Typ "str", also ist es sowohl ein basestring als auch ein str

4

Wirklich, was Sie fragen, ist der Unterschied zwischen der basestring und str-Klasse.

Str ist eine Klasse, die von basestr erbt. Aber Unicode-Strings gibt es auch, ebenso wie andere, wenn Sie eins machen wollten.

Verwandte Themen