web-dev-qa-db-fra.com

Python façon d’imprimer: avec 'format' ou forme pour cent?

Dans Python, il semble y avoir deux façons différentes de générer une sortie formatée:

user = "Alex"
number = 38746
print("%s asked %d questions on stackoverflow.com" % (user, number))
print("{0} asked {1} questions on stackoverflow.com".format(user, number))

Y a-t-il un moyen d'être préféré à l'autre? Sont-ils équivalents, quelle est la différence? Quelle forme devrait être utilisée, en particulier pour Python3?

94
Alex

Utilisez la méthode format, surtout si vous êtes préoccupé par Python 3 et les versions ultérieures. From la documentation :

Les opérations de formatage décrites ici sont modélisées sur la syntaxe de printf() de C. Ils ne prennent en charge que le formatage de certains types prédéfinis. L'utilisation d'un opérateur binaire signifie que des précautions peuvent être nécessaires pour formater correctement les n-uplets et les dictionnaires. Comme la nouvelle: ref: string-formatting La syntaxe est plus flexible et gère les n-uplets et les dictionnaires naturellement, il est recommandé pour le nouveau code. Cependant, il n’est pas prévu de déprécier le formatage de style printf-.

103
BrenBarn

.format a été introduit dans Python2.6

Si vous avez besoin d’une compatibilité ascendante avec les versions antérieures de Python, vous devez utiliser %

Pour Python3 et plus récent, vous devriez utiliser .format pour sûr

.format est plus puissant que %. Portage % à .format est facile mais l’inverse peut être non trivial

22
John La Rooy

Vous pouvez utiliser les deux. Aucun n'a dit que% l'expression de formatage est déconseillée. Cependant, comme indiqué précédemment, l'appel de la méthode de formatage est un peu plus puissant. Notez également que les expressions% sont un peu plus concises et plus faciles à coder. Essayez-les et voyez ce qui vous convient le mieux.

8
devsaw

Les docs disent que la méthode format est préférée pour le nouveau code. Il n'est toutefois pas prévu de supprimer% le formatage.

8
riamse