web-dev-qa-db-fra.com

fonctions str () vs repr () dans python 2.7.5

quelle est la différence entre les fonctions str() et repr() dans python 2.7.5?

Explication sur python.org:

La fonction str() est destinée à renvoyer des représentations de valeurs qui sont assez lisibles par l'homme, tandis que repr() est destinée à générer des représentations qui peuvent être lu par l'interpréteur (ou forcera un SyntaxError s'il n'y a pas de syntaxe équivalente)

Mais ce n'était pas clair pour moi.

quelques exemples:

>>> s = 'Hello, world.'
>>> str(s)
'Hello, world.'
>>> repr(s)
"'Hello, world.'"      # repr is giving an extra double quotes
>>> str(1.0/7.0)
'0.142857142857'
>>> repr(1.0/7.0)
'0.14285714285714285'  # repr is giving value with more precision

donc je veux savoir ce qui suit

  1. Quand dois-je utiliser str() et quand dois-je utiliser repr()?
  2. Dans quels cas puis-je utiliser l'un ou l'autre?
  3. Que peut str() faire que repr() ne peut pas?
  4. Que peut repr() faire que str() ne peut pas?
28
AnV

Quand dois-je utiliser str () et quand dois-je utiliser repr ()?

Utilisez presque toujours str() lors de la création de sortie pour les utilisateurs finaux.

repr() est principalement utile pour le débogage et l'exploration. Par exemple, si vous suspectez qu'une chaîne contient des caractères non imprimables ou qu'un flottant a une petite erreur d'arrondi, repr() vous montrera; str() peut ne pas.

repr() peut également être utile pour générer des littéraux à coller dans votre code source. Il peut également être utilisé pour la persistance (avec ast.literal_eval Ou eval), mais c'est rarement une bonne idée - si vous voulez des valeurs persistantes modifiables, quelque chose comme JSON ou YAML est beaucoup mieux, et si vous ne prévoyez pas de les modifier, utilisez du cornichon.

2.Dans quels cas puis-je utiliser l'un d'eux?

Eh bien, vous pouvez les utilisez presque partout. Vous ne devriez pas les utilisez généralement sauf comme décrit ci-dessus.

3. Que peut faire str() que repr() ne peut pas?

Donnez-vous une sortie adaptée à la consommation de l'utilisateur final - pas toujours (par exemple, str (["spam", "œufs"]) n'est probablement pas quelque chose que vous souhaitez mettre dans une interface graphique), mais plus souvent que repr().

4. Que peut repr() faire que str() ne peut pas

Donnez-vous une sortie utile pour le débogage - encore une fois, pas toujours (la valeur par défaut pour les instances de classes créées par l'utilisateur est rarement utile), mais chaque fois que possible.

Et parfois, vous donnez une sortie qui est une expression Python littérale ou autre) - mais vous voulez rarement vous y fier, sauf pour l'exploration interactive.

30
abarnert