Voulez-vous une représentation sous forme de chaîne lisible par l'homme des données? Ou voulez-vous une vue orientée octets de la mémoire contenant les données?
Jeremy Brown
Soyez prudent avec le type de données que vous souhaitez modifier. Voir la réponse ci
PythoNic
Réponses:
126
myvariable =4
mystring = str(myvariable)# '4'
aussi, essayez également repr:
mystring = repr(myvariable)# '4'
C'est ce qu'on appelle la «conversion» en python, et c'est assez courant.
Je n'utiliserais pas repr (myvariable) - il renvoie souvent des informations sur le type de classe, l'adresse mémoire, etc. C'est plus utile pour le débogage. Utilisez str (myvariable) pour la conversion en chaîne et unicode (variable) pour la conversion en unicode.
Abgan
2
Qu'en est-il de l'Unicode? Quelque chose comme ça str(u'ä')ne fonctionnera pas. Cependant repr(u'ä')fonctionnera.
Rouven B.
1
qu'en est-il de Aucun et Faux?
fredless
54
strest destiné à produire une représentation sous forme de chaîne des données de l'objet. Si vous écrivez votre propre cours et que vous souhaitez strtravailler pour vous, ajoutez:
def __str__(self):return"Some descriptive string"
print str(myObj)appellera myObj.__str__().
represt une méthode similaire, qui produit généralement des informations sur les informations de classe. Pour la plupart des objets de bibliothèque de base, reprproduit le nom de la classe (et parfois certaines informations de classe) entre crochets angulaires. reprsera utilisé, par exemple, en tapant simplement votre objet dans votre volet d'interactions, sans utiliser printni rien d'autre.
Vous pouvez définir le comportement de reprpour vos propres objets tout comme vous pouvez définir le comportement de str:
Il est probablement vrai que la majorité des objets de bibliothèque de base par pourcentage brut renvoient la object.__repr__représentation de type crochet angulaire, mais la plupart des objets les plus couramment utilisés ne le font pas. La règle de base pour reprque s'il est logique de retourner le code Python qui pourrait être évaluée pour produire le même objet, faire, tout comme str, frozensetet la plupart des autres builtins font, mais si elle ne le fait pas, utilisez l'angle-support formulaire pour vous assurer que ce que vous retournez ne peut pas être confondu avec une représentation lisible par l'homme et évaluable en tant que source.
abarnert
(Bien sûr, certains des composants intégrés enfreignent cette règle de base - un listqui inclut lui-même renvoie quelque chose qui non seulement ressemble mais est du code évaluable, qui évalue la mauvaise chose - mais les développeurs principaux n'ont jamais pris cela comme une licence pour développer le même comportement dans le stdlib.)
abarnert
19
Je vois que toutes les réponses recommandent d'utiliser str(object). Cela peut échouer si votre objet a plus de caractères ascii et vous verrez une erreur comme ordinal not in range(128). C'était le cas pour moi pendant que je convertissais une liste de chaînes dans une langue autre que l'anglais
dans Python 3.0 et au-delà, str (object) fait unicode par défaut
dmjalund
13
str(object) fera l'affaire.
Si vous souhaitez modifier la manière dont l'objet est stringifié, définissez la __str__(self)méthode de la classe de l'objet. Une telle méthode doit retourner un objet str ou unicode.
Quelle méthode est efficace? str(any_var)ouany_var.__str__()
Kedar.Aitawdekar
@ Kedar.Aitawdekar: Même s'il y a une différence notable dans le temps d'exécution (ce dont je doute, mais je vous encourage à le vérifier en utilisant le timeitmodule), vous devriez l'utiliser str(any_var)car il est plus lisible pour l'homme et permet de bénéficier de cas où any_vardéfinit __repr__()mais ne le fait pas ' t définir __str__().
Renvoie une chaîne contenant une représentation joliment imprimable d'un objet. Pour les chaînes, cela renvoie la chaîne elle-même. La différence avec repr (object) est que str (object) n'essaie pas toujours de renvoyer une chaîne acceptable pour eval (); son objectif est de renvoyer une chaîne imprimable. Si aucun argument n'est donné, renvoie la chaîne vide, «».
Soyez prudent si vous voulez vraiment "changer" le type de données. Comme dans d'autres cas (par exemple, changer l'itérateur dans une forboucle), cela peut provoquer un comportement inattendu:
>> 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)
? c'est ça que tu cherches?Réponses:
aussi, essayez également repr:
C'est ce qu'on appelle la «conversion» en python, et c'est assez courant.
la source
str(u'ä')
ne fonctionnera pas. Cependantrepr(u'ä')
fonctionnera.str
est destiné à produire une représentation sous forme de chaîne des données de l'objet. Si vous écrivez votre propre cours et que vous souhaitezstr
travailler pour vous, ajoutez:print str(myObj)
appelleramyObj.__str__()
.repr
est une méthode similaire, qui produit généralement des informations sur les informations de classe. Pour la plupart des objets de bibliothèque de base,repr
produit le nom de la classe (et parfois certaines informations de classe) entre crochets angulaires.repr
sera utilisé, par exemple, en tapant simplement votre objet dans votre volet d'interactions, sans utiliserprint
ni rien d'autre.Vous pouvez définir le comportement de
repr
pour vos propres objets tout comme vous pouvez définir le comportement destr
:>>> myObj
dans votre volet d'interactions, ourepr(myObj)
entraîneramyObj.__repr__()
la source
object.__repr__
représentation de type crochet angulaire, mais la plupart des objets les plus couramment utilisés ne le font pas. La règle de base pourrepr
que s'il est logique de retourner le code Python qui pourrait être évaluée pour produire le même objet, faire, tout commestr
,frozenset
et la plupart des autres builtins font, mais si elle ne le fait pas, utilisez l'angle-support formulaire pour vous assurer que ce que vous retournez ne peut pas être confondu avec une représentation lisible par l'homme et évaluable en tant que source.list
qui inclut lui-même renvoie quelque chose qui non seulement ressemble mais est du code évaluable, qui évalue la mauvaise chose - mais les développeurs principaux n'ont jamais pris cela comme une licence pour développer le même comportement dans le stdlib.)Je vois que toutes les réponses recommandent d'utiliser
str(object)
. Cela peut échouer si votre objet a plus de caractères ascii et vous verrez une erreur commeordinal not in range(128)
. C'était le cas pour moi pendant que je convertissais une liste de chaînes dans une langue autre que l'anglaisJe l'ai résolu en utilisant
unicode(object)
la source
str(object)
fera l'affaire.Si vous souhaitez modifier la manière dont l'objet est stringifié, définissez la
__str__(self)
méthode de la classe de l'objet. Une telle méthode doit retourner un objet str ou unicode.la source
str(any_var)
ouany_var.__str__()
timeit
module), vous devriez l'utiliserstr(any_var)
car il est plus lisible pour l'homme et permet de bénéficier de cas oùany_var
définit__repr__()
mais ne le fait pas ' t définir__str__()
.Utilisez le
str
intégré:Exemples:
De la documentation:
la source
Avec
str(x)
. Cependant, chaque type de données peut définir sa propre conversion de chaîne, donc ce n'est peut-être pas ce que vous souhaitez.la source
Vous pouvez utiliser
%s
comme ci-dessousla source
Utilisez simplement
str
- par exemple:la source
Utilisez la mise en forme:
Exemple:
Sortie: jeu 11 janvier 20:40:05 2018
la source
Soyez prudent si vous voulez vraiment "changer" le type de données. Comme dans d'autres cas (par exemple, changer l'itérateur dans une
for
boucle), cela peut provoquer un comportement inattendu:la source