Eu não usaria repr (myvariable) - geralmente retorna informações sobre tipo de classe, endereço de memória etc. É mais útil para depuração. Use str (myvariable) para conversão em string e unicode (variável) para conversão em unicode.
Abgan
2
E o unicode? Algo como str(u'ä')não vai funcionar. No entanto repr(u'ä')vai funcionar.
quer
1
e quanto a None e False?
Fredless
54
strdestina-se a produzir uma representação de string dos dados do objeto. Se você está escrevendo sua própria turma e deseja strtrabalhar para você, adicione:
def __str__(self):return"Some descriptive string"
print str(myObj)vai ligar myObj.__str__().
repré um método semelhante, que geralmente produz informações sobre as informações da classe. Para a maioria dos objetos da biblioteca principal, reprproduz o nome da classe (e algumas vezes algumas informações da classe) entre colchetes angulares. reprserá usado, por exemplo, apenas digitando seu objeto no painel de interações, sem usar printou qualquer outra coisa.
Você pode definir o comportamento de reprseus próprios objetos, assim como o comportamento de str:
Provavelmente, é verdade que a maioria dos objetos principais da biblioteca, em porcentagem bruta, retorna a object.__repr__representação entre colchetes angulares ao estilo, mas muitos dos objetos mais usados não. A regra de ouro para repré que se faz sentido para retornar código Python que poderiam ser avaliadas para produzir o mesmo objeto, fazer isso, assim como str, frozenset, e mais outras builtins fazer, mas se isso não acontecer, use o ângulo do suporte para garantir que o que você retorne não possa ser confundido com uma repr legível por humanos e avaliada como fonte.
precisa saber é
(É claro que alguns dos componentes internos violam essa regra de ouro - um listque inclui ele próprio retorna algo que não apenas parece, mas é um código avaliável, que avalia a coisa errada - mas os desenvolvedores principais nunca aceitaram isso como licença para expandir o mesmo comportamento no stdlib.)
abarnert 21/03
19
Vejo que todas as respostas recomendam o uso str(object). Pode falhar se o seu objeto tiver mais do que caracteres ascii e você verá um erro semelhante ordinal not in range(128). Esse foi o meu caso enquanto eu estava convertendo a lista de strings em outro idioma que não o inglês
em Python 3.0 em diante, str (objecto) faz Unicode por padrão
dmjalund
13
str(object) fará o truque.
Se você deseja alterar a maneira como o objeto é stringificado, defina o __str__(self)método para a classe do objeto. Esse método deve retornar o objeto str ou unicode.
Qual método é eficiente? str(any_var)ouany_var.__str__()
Kedar.Aitawdekar 15/09/16
@ Kedar.Aitawdekar: Mesmo que haja uma diferença perceptível no tempo de execução (o que duvido, mas encorajo você a alterá-lo usando o timeitmódulo), você deve usar, str(any_var)pois é mais legível para humanos e permite se beneficiar de casos em que any_vardefine, __repr__()mas não ' t define __str__().
Retorne uma string contendo uma representação bem imprimível de um objeto. Para cadeias, isso retorna a própria cadeia. A diferença com repr (objeto) é que str (objeto) nem sempre tenta retornar uma string aceitável para eval (); seu objetivo é retornar uma sequência imprimível. Se nenhum argumento for fornecido, retornará a string vazia, ''.
Cuidado se você realmente deseja "alterar" o tipo de dados. Como em outros casos (por exemplo, alterando o iterador em um forloop), isso pode gerar um comportamento 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)
? é isso que você está procurando?Respostas:
Além disso, tente alternativamente repr:
Isso é chamado de "conversão" em python e é bastante comum.
fonte
str(u'ä')
não vai funcionar. No entantorepr(u'ä')
vai funcionar.str
destina-se a produzir uma representação de string dos dados do objeto. Se você está escrevendo sua própria turma e desejastr
trabalhar para você, adicione:print str(myObj)
vai ligarmyObj.__str__()
.repr
é um método semelhante, que geralmente produz informações sobre as informações da classe. Para a maioria dos objetos da biblioteca principal,repr
produz o nome da classe (e algumas vezes algumas informações da classe) entre colchetes angulares.repr
será usado, por exemplo, apenas digitando seu objeto no painel de interações, sem usarprint
ou qualquer outra coisa.Você pode definir o comportamento de
repr
seus próprios objetos, assim como o comportamento destr
:>>> myObj
no painel de interações ourepr(myObj)
resultará emmyObj.__repr__()
fonte
object.__repr__
representação entre colchetes angulares ao estilo, mas muitos dos objetos mais usados não. A regra de ouro pararepr
é que se faz sentido para retornar código Python que poderiam ser avaliadas para produzir o mesmo objeto, fazer isso, assim comostr
,frozenset
, e mais outras builtins fazer, mas se isso não acontecer, use o ângulo do suporte para garantir que o que você retorne não possa ser confundido com uma repr legível por humanos e avaliada como fonte.list
que inclui ele próprio retorna algo que não apenas parece, mas é um código avaliável, que avalia a coisa errada - mas os desenvolvedores principais nunca aceitaram isso como licença para expandir o mesmo comportamento no stdlib.)Vejo que todas as respostas recomendam o uso
str(object)
. Pode falhar se o seu objeto tiver mais do que caracteres ascii e você verá um erro semelhanteordinal not in range(128)
. Esse foi o meu caso enquanto eu estava convertendo a lista de strings em outro idioma que não o inglêsEu o resolvi usando
unicode(object)
fonte
str(object)
fará o truque.Se você deseja alterar a maneira como o objeto é stringificado, defina o
__str__(self)
método para a classe do objeto. Esse método deve retornar o objeto str ou unicode.fonte
str(any_var)
ouany_var.__str__()
timeit
módulo), você deve usar,str(any_var)
pois é mais legível para humanos e permite se beneficiar de casos em queany_var
define,__repr__()
mas não ' t define__str__()
.Use o
str
built-in:Exemplos:
A partir da documentação:
fonte
Com
str(x)
. No entanto, todo tipo de dados pode definir sua própria conversão de cadeia, portanto, pode não ser o que você deseja.fonte
Você pode usar
%s
como abaixofonte
Basta usar
str
- por exemplo:fonte
Use a formatação:
Exemplo:
Saída: Qui Jan 11 20:40:05 2018
fonte
Cuidado se você realmente deseja "alterar" o tipo de dados. Como em outros casos (por exemplo, alterando o iterador em um
for
loop), isso pode gerar um comportamento inesperado:fonte