a='aaaa'
print isinstance(a, basestring)#true
print isinstance(a, str)#true
Respuesta
En las versiones de Python anteriores a la 3.0 existen dos tipos de cadenas "strings simples" y "strings unicode". Las cadenas simples (str
) no pueden representar caracteres fuera del alfabeto latino (ignorando los detalles de las páginas de códigos por simplicidad). Las cadenas Unicode (unicode
) pueden representar caracteres de cualquier alfabeto, incluidos algunos de ficción como Klingon.
¿Por qué tener dos tipos de cadenas? ¿No sería mejor tener Unicode ya que eso cubriría todos los casos? Bueno, es mejor tener únicamente Unicode, pero se creó Python antes de que Unicode fuera el método preferido para representar cadenas. Lleva tiempo transitar el tipo de cadena en un idioma con muchos usuarios, en Python 3.0 finalmente sucede que todas las cadenas son Unicode.
la jerarquía de herencia de cadenas de Python pre-3,0 es:
object
|
|
basestring
/\
/ \
str unicode
'basestring' introducido en Python 2.3 puede ser pensado como un paso en la dirección de la unificación de cadena, ya que se puede utilizar para comprobar si un objeto es una instancia de str
o 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
Todas las cadenas son cadenas básicas, pero las cadenas unicode no son del tipo str. Pruebe esto en su lugar:
>>> a=u'aaaa'
>>> print isinstance(a, basestring)
True
>>> print isinstance(a, str)
False
Basestring es la superclase de la cadena. En su ejemplo, a es de tipo "str" por lo tanto, es a la vez una basetring, y un str
Realmente lo que está preguntando es la diferencia entre la clase base y str.
Str es una clase que hereda de basestr. Pero también existen cadenas Unicode, como otras, si quisieras crear una.
>>> a = u'aaaa'
>>> isinstance(a, str)
False
>>> isinstance(a, basestring)
True
- 1. diferencia entre Aaa; y Aaa();
- 2. cómo isinstance (x, module)?
- 3. Java isInstance vs instanceOf operator
- 4. instanceof vs isInstance()
- 5. Rhino Mocks AAA ¿Arranque rápido?
- 6. iPhone: DatePicker dd/mm/aaa
- 7. ¿Cuál es el equivalente de VB de instanceof de Java e isInstance()?
- 8. isinstance (objeto, tipo) en python
- 9. IsInstance en la plantilla de Django?
- 10. cuál es la diferencia entre stringstream clear y str
- 11. ¿Por qué Python no utiliza `except`` isinstance`?
- 12. Forma negativa de isinstance() en Python
- 13. ¿Cuál es la sintaxis AAA equivalente al uso de Ordered() en Rhino Mocks
- 14. Localización e internacionalización, ¿cuál es la diferencia?
- 15. ¿Cuál es la diferencia entre IDREF e IDREFS en XSD?
- 16. ¿Cuál es la diferencia entre Scope_Identity(), Identity(), @@ Identity e Ident_Current()?
- 17. ¿Cuál es la diferencia entre WAS e IIS?
- 18. ¿Cuál es la diferencia entre identidad e igualdad en OOP?
- 19. ¿Cuál es la diferencia entre las interfaces IComparable e IEquatable?
- 20. ¿Cuál es la diferencia entre "protegido" e "interno protegido"?
- 21. Cuál es la diferencia entre Add-PsSnapIn e Import-Module
- 22. ¿Cuál es la diferencia entre NHibernate e iBATIS.NET?
- 23. ¿Cuál es la diferencia entre IEnumerator e IEnumerable?
- 24. Erlang: ¿cuál es la diferencia entre "include_lib" e "include"?
- 25. ¿Cuál es la diferencia entre una clave principal e identidad?
- 26. ¿Cuál es la diferencia entre objeto e instancia?
- 27. ¿Cuál es la diferencia entre "privado" e "interno protegido"?
- 28. ¿Cuál es la diferencia entre import java.util. *; e importar java.util.Date; ?
- 29. ¿Cuál es la diferencia entre Tarea e hilo?
- 30. ¿Cuál es la diferencia entre ObservableCollection e INotifyPropertyChanged?
+1 para el gráfico agradable ascii ;-) – ChristopheD
ha hecho este cambio en Python 3? ¿Los nuevos 'str' y' byte' siguen siendo hijos de 'basetring'? Merece la pena agregar una nota sobre esto. – MestreLion
+1. Una buena explicación para aquellos sin antecedentes de programación que están tratando de entender y hacer el trabajo con Python (me incluye a mí). – RubenGeert