No usaría repr (myvariable): a menudo devuelve información sobre el tipo de clase, la dirección de memoria, etc. Es más útil para la depuración. Utilice str (myvariable) para la conversión a cadena y unicode (variable) para la conversión a unicode.
Abgan
2
¿Qué pasa con Unicode? Algo así str(u'ä')no funcionará. Sin embargo repr(u'ä')funcionará.
Rouven B.
1
¿Qué pasa con Ninguno y Falso?
fredless
54
strestá destinado a producir una representación en cadena de los datos del objeto. Si estás escribiendo tu propia clase y quieres strtrabajar para ti, agrega:
def __str__(self):return"Some descriptive string"
print str(myObj)llamará myObj.__str__().
repres un método similar, que generalmente produce información sobre la información de la clase. Para la mayoría de los objetos de la biblioteca central, reprproduce el nombre de la clase (y en algún momento alguna información de clase) entre paréntesis angulares. reprse usará, por ejemplo, simplemente escribiendo su objeto en el panel de interacciones, sin usar printni nada más.
Puede definir el comportamiento de reprsus propios objetos al igual que puede definir el comportamiento de str:
Probablemente sea cierto que la mayoría de los objetos de la biblioteca principal por porcentaje sin procesar devuelven la representación de object.__repr__estilo de paréntesis angular, pero muchos de los más utilizados no lo hacen. La regla de oro para repres que si tiene sentido para devolver el código Python que podrían ser evaluados para producir el mismo objeto, lo que, al igual str, frozensety la mayoría de los otros órdenes internas hacen, pero si no es así, utilizan la escuadra angular formulario para asegurarse de que lo que devuelve no se pueda confundir con una representación humana legible y evaluable como fuente.
abarnert
(Por supuesto, algunas de las construcciones violan esa regla general, una listque se incluye a sí misma devuelve algo que no solo se ve sino que es un código evaluable, que evalúa lo incorrecto, pero los desarrolladores principales nunca lo han tomado como una licencia para expandir el mismo comportamiento en el stdlib.)
abarnert
19
Veo todas las respuestas recomiendan usar str(object). Podría fallar si su objeto tiene más de caracteres ascii y verá un error como ordinal not in range(128). Este fue el caso para mí mientras convertía la lista de cadenas en un idioma que no era inglés
en Python 3.0 en adelante, str (objeto) hace unicode por defecto
dmjalund
13
str(object) Hará el truco.
Si desea alterar la forma en que el objeto está en cadena, defina el __str__(self)método para la clase del objeto. Tal método tiene que devolver str u objeto unicode.
¿Qué método es eficiente? str(any_var)oany_var.__str__()
Kedar.Aitawdekar
@ Kedar.Aitawdekar: Incluso si hay una diferencia notable en el tiempo de ejecución (lo cual dudo, pero le animo a que lo confirme usando el timeitmódulo), debe usarlo str(any_var)ya que es más legible para los humanos y permite beneficiarse de los casos cuando se any_vardefine, __repr__()pero no t definir __str__().
Devuelve una cadena que contiene una representación muy bien imprimible de un objeto. Para cadenas, esto devuelve la cadena en sí. La diferencia con repr (objeto) es que str (objeto) no siempre intenta devolver una cadena que sea aceptable para eval (); Su objetivo es devolver una cadena imprimible. Si no se proporciona ningún argumento, devuelve la cadena vacía ''.
Tenga cuidado si realmente quiere "cambiar" el tipo de datos. Al igual que en otros casos (por ejemplo, cambiar el iterador en un forbucle), esto podría generar un comportamiento inesperado:
>> dct ={1:3,2:1}>> len(str(dct))12>>print(str(dct)){1:31,2:0}>> l =["all","colours"]>> len(str(l))18
str(var)
? ¿Es eso lo que estás buscando?Respuestas:
También, alternativamente, intente repr:
Esto se llama "conversión" en python, y es bastante común.
fuente
str(u'ä')
no funcionará. Sin embargorepr(u'ä')
funcionará.str
está destinado a producir una representación en cadena de los datos del objeto. Si estás escribiendo tu propia clase y quieresstr
trabajar para ti, agrega:print str(myObj)
llamarámyObj.__str__()
.repr
es un método similar, que generalmente produce información sobre la información de la clase. Para la mayoría de los objetos de la biblioteca central,repr
produce el nombre de la clase (y en algún momento alguna información de clase) entre paréntesis angulares.repr
se usará, por ejemplo, simplemente escribiendo su objeto en el panel de interacciones, sin usarprint
ni nada más.Puede definir el comportamiento de
repr
sus propios objetos al igual que puede definir el comportamiento destr
:>>> myObj
en su panel de interacciones, orepr(myObj)
, dará como resultadomyObj.__repr__()
fuente
object.__repr__
estilo de paréntesis angular, pero muchos de los más utilizados no lo hacen. La regla de oro pararepr
es que si tiene sentido para devolver el código Python que podrían ser evaluados para producir el mismo objeto, lo que, al igualstr
,frozenset
y la mayoría de los otros órdenes internas hacen, pero si no es así, utilizan la escuadra angular formulario para asegurarse de que lo que devuelve no se pueda confundir con una representación humana legible y evaluable como fuente.list
que se incluye a sí misma devuelve algo que no solo se ve sino que es un código evaluable, que evalúa lo incorrecto, pero los desarrolladores principales nunca lo han tomado como una licencia para expandir el mismo comportamiento en el stdlib.)Veo todas las respuestas recomiendan usar
str(object)
. Podría fallar si su objeto tiene más de caracteres ascii y verá un error comoordinal not in range(128)
. Este fue el caso para mí mientras convertía la lista de cadenas en un idioma que no era inglésLo resolví usando
unicode(object)
fuente
str(object)
Hará el truco.Si desea alterar la forma en que el objeto está en cadena, defina el
__str__(self)
método para la clase del objeto. Tal método tiene que devolver str u objeto unicode.fuente
str(any_var)
oany_var.__str__()
timeit
módulo), debe usarlostr(any_var)
ya que es más legible para los humanos y permite beneficiarse de los casos cuando seany_var
define,__repr__()
pero no t definir__str__()
.Use el
str
incorporado:Ejemplos:
De la documentación:
fuente
Con
str(x)
. Sin embargo, cada tipo de datos puede definir su propia conversión de cadena, por lo que esto podría no ser lo que desea.fuente
Puedes usar
%s
como a continuaciónfuente
Solo use
str
, por ejemplo:fuente
Usar formato:
Ejemplo:
Salida: jue 11 ene 20:40:05 2018
fuente
Tenga cuidado si realmente quiere "cambiar" el tipo de datos. Al igual que en otros casos (por ejemplo, cambiar el iterador en un
for
bucle), esto podría generar un comportamiento inesperado:fuente