110 votes

Les Pythons de nombreuses façons de chaîne de formatage — sont les plus âgés (va) obsolète?

Python dispose d'au moins cinq moyens de formatage de chaîne de caractères:

In [1]: world = "Earth"

# method 1a
In [2]: "Hello, %s" % world
Out[2]: 'Hello, Earth'

# method 1b
In [3]: "Hello, %(planet)s" % {"planet": world}
Out[3]: 'Hello, Earth'

# method 2a
In [4]: "Hello, {0}".format(world)
Out[4]: 'Hello, Earth'

# method 2b
In [5]: "Hello, {planet}".format(planet=world)
Out[5]: 'Hello, Earth'

In [6]: from string import Template

# method 3
In [7]: Template("Hello, $planet").substitute(planet=world)
Out[7]: 'Hello, Earth'

Un bref historique des méthodes différentes:

  • printf-mise en forme de style a été autour depuis des Pythons de l'enfance
  • L' Template classe a été introduit en Python 2.4
  • L' format méthode a été introduite dans la version 2.6 de Python

Mes questions sont les suivantes:

  • Est - printf-mise en forme de style obsolète ou va être obsolète?
  • Dans l' Template class, est l' substitute méthode obsolète ou va être obsolète? (Je ne parle pas de l' safe_substitute, qui, comme je comprends qu'il offre des capacités uniques)

Des questions similaires, et pourquoi je pense qu'ils ne sont pas des doublons:

59voto

Martijn Pieters Points 271458

Le nouveau .format() méthode est destinée à remplacer le vieux - % mise en forme de la syntaxe. Ce dernier a été désapprouvée déjà. La documentation de la méthode comme:

Cette méthode de chaîne de formatage est la nouvelle norme en Python 3, et doit être préféré à l' % mise en forme décrite dans la Chaîne de Formatage dans le nouveau code.

Toutefois, afin d'assurer la rétrocompatibilité et à faire la transition plus facile, l'ancien format a été laissé en place pour l'instant. À partir de l'original PEP 3101 proposition:

Rétro-Compatibilité

Rétro-compatibilité peut être maintenu en laissant l'existant les mécanismes en place. Le nouveau système ne sont pas en collision avec l'un de les noms de méthode de la chaîne existante techniques de mise en forme, de sorte les deux systèmes peuvent coexister jusqu'à ce qu'il vient le temps de rendre caduque l' ancien système.

Le nouveau système a comme avantage que vous pouvez combiner le n-uplet et dictionnaire approche de la vieille - % formateur:

"{greeting}, {0}".format(world, greeting='Hello')

Notez que l'ancien système avait % et de la Template classe, où ce dernier vous permet de créer des sous-classes que d'ajouter ou de modifier son comportement. Le style nouveau système a l' Formatter classe pour remplir le même créneau.

Je suis un hollandais expat trop, des 12 dernières années, seuls 2 ont été passé à vivre dans le vieux-Kikkerland. Mais j'ai travaillé avec Guido à un certain point, peut-être que cela a aidé. :-P

46voto

jsbueno Points 22212

L' % de l'opérateur pour la mise en forme de chaîne n'est pas obsolète, et ne va pas être enlevée malgré les autres réponses.
Chaque fois que le sujet est soulevé sur Python, le développement de la liste, il y a une forte controverse sur ce qui est mieux, mais pas de polémique sur le retrait de la voie classique - il va rester. En dépit d'être notée sur PEP 3101, Python 3.1 était venu et reparti, et % mise en forme est toujours là.

Les instructions pour le maintien de style classique sont claires: c'est simple, c'est rapide, c'est rapide à faire pour le court des choses. À l'aide de l' .format méthode n'est pas toujours plus lisible et à peine toute personne, même parmi les développeurs peuvent utiliser la syntaxe complète fournie par .format sans avoir à regarder la référence Même en 2009, on avait des messages comme ceci: http://mail.python.org/pipermail/python-dev/2009-October/092529.html - le sujet avait à peine montré dans les listes depuis.

20voto

GSP Points 308

Guido dernière position sur ce qui semble être indiqué ici:

Ce qui est Nouveau En Python 3.0

PEP 3101: UNE Nouvelle Approche De la mise en forme de Chaîne

Un nouveau système de chaîne intégrée opérations de mise en forme remplace l' % chaîne de caractères mise en forme de l'opérateur. (Toutefois, l'opérateur % est encore pris en charge, il sera obsolète en Python 3.1 et retiré de la langue plus tard.) Lire PEP 3101 pour un exposé complet.

Et le PEP3101 elle-même, dont la dernière modification datant (Fri, 30 Sep 2011), donc pas de progrès dès la fin de celle-là, je suppose.

18voto

Marwan Alsabbagh Points 4245

En regardant les anciennes Python docs et PEP 3101 il y avait une déclaration de l'opérateur % sera obsolète et retiré de la langue dans l'avenir. La déclaration suivante a été dans le Python docs pour Python 3.0, 3.1 et 3.2:

Depuis str.format() est tout à fait nouveau, beaucoup de code Python utilise encore l' % de l'opérateur. Cependant, parce que ce vieux style de mise en forme éventuellement être supprimée de la langue, str.format() doit généralement être utilisé.

Si vous allez à la même section en Python 3.3 et 3.4 docs, vous verrez que la déclaration a été supprimé. Je ne peux pas trouver une autre instruction n'importe où ailleurs dans la documentation attestant que l'opérateur va être perdu ou enlevé de la langue. Il est également important de noter que PEP3101 n'a pas été modifié depuis plus de deux ans et demi (Fri, 30 Sep 2011).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X