a='aaaa'
print isinstance(a, basestring)#true
print isinstance(a, str)#true
Antwort
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
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
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
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.
- 1. Unterschied in Python zwischen Basestring und types.StringType?
- 2. Alle Kombinationen von aaa bis ~~~
- 3. Was ist schneller: instanceof oder isInstance?
- 4. Java isInstance vs. instanceOf-Operator
- 5. isinstance ohne Importkandidaten
- 6. Was ist das VB-Äquivalent von Javas instanceof und isInstance()?
- 7. isinstance() funktioniert nicht
- 8. Instanceof vs isinstance()
- 9. Was bedeutet es isInstance ist ein 'dynamisches Äquivalent' von instanceof?
- 10. Klasse # isinstance vs Klasse # IsAssignableFrom
- 11. Rhino Mocks AAA-Syntax und Thread-Sicherheit
- 12. Was sollte ich anstelle von isinstance() verwenden
- 13. python isinstance vs hasattr vs versuchen/außer: Was ist besser?
- 14. Vermeidung von isInstance-Anweisung
- 15. Python: Was ist der Unterschied zwischen __builtin__ und __builtins__?
- 16. Was ist der Unterschied zwischen stringstream clear und str
- 17. Python: Ist in diesem Fall isinstance() notwendig?
- 18. Was ist das issubclass Äquivalent von isinstance in Python?
- 19. Python vergleicht boolean und int mit isinstance
- 20. Verwendet Python `isinstance` jemals richtig?
- 21. Seltsames Verhalten von isinstance Funktion
- 22. "aaaa" .StartsWith ("aaa") gibt false zurück
- 23. Verwenden isinstance für Unicode-String testen
- 24. Warum ist mein dbms_output.put ('AAA'); Linie druckt nichts ...?
- 25. Python ist der Unterschied zwischen Klasse (dict) und Klasse (str)
- 26. Was ist der Unterschied zwischen `==` und `ist`?
- 27. Was ist die AAA-Syntax entspricht der Verwendung von Ordered() in Rhino Mocks
- 28. isinstance (foo, types.GeneratorType) oder inspect.isgenerator (foo)?
- 29. Warum benutzt Pythons `except` nicht` isinstance`?
- 30. Wie ist das C# -Aquivalent zu Java isInstance()?
+1 für die schöne ascii graph ;-) – ChristopheD
Hat diese Änderung in Python 3? Sind die neuen 'str' und' byte' noch Kinder von 'basestring'? Es wäre eine Anmerkung wert. – MestreLion
+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