2009-11-19 4 views
5

Chaîne de mise en forme des expressions:chaîne de mise en forme des expressions (Python)

'This is %d %s example!' % (1, 'nice') 

chaîne méthode mise en forme appelle:

'This is {0} {1} example!'.format(1, 'nice') 

Personnellement, je préfère les appels de méthode (deuxième exemple) pour une meilleure lisibilité mais comme il est nouveau, il y a une chance que l'un ou l'autre d'entre eux devienne obsolète avec le temps. Selon vous, lequel est le moins susceptible d'être déprécié?

+0

Lorsqu'un nouveau formulaire est introduit, n'est-ce pas que l'ancien formulaire est généralement obsolète? – sykora

+1

Tout devient obsolète avec le temps. Quelle est la question? –

Répondre

5

L'idée originale était de progressivement passer à str.format() approche tout en permettant dans les deux sens:

PEP 3101:
le nouveau système ne pas entrer en collision avec l'un des noms de la méthode de la mise en forme des techniques chaîne existante, afin que les deux systèmes peuvent coexister unti l il vient le temps de déprécier l'ancien système.

L'idée est toujours à l'étude:

Nous encourageons toujours les gens à utiliser la nouvelle str.format(). Python Issue 7343

Depuis l'approche « % » original est prévu pour être retiré désapprouvée et à un moment donné à l'avenir, je suggère d'écrire un nouveau code avec str.format(). Bien que pour l'instant, c'est juste une question de préférence personnelle. Personnellement, je préfère utiliser la mise en forme par dictionnaire, qui est supportée par l'opérateur '%' et la méthode str.format().

6

Je pensais avoir lu que l'opérateur % est déjà obsolète en 3.1, donc je m'en tiens à la fonction format().

Voir PEP 3101: A New Approach To String Formatting

+0

Huh? Où avez-vous vu cela? Il n'y a rien dans le Quoi de neuf à http://docs.python.org/3.1/whatsnew/3.1.html –

+0

Je cours 3.1 et cela fonctionne, encore. – 3zzy

+0

J'ai trouvé le lien correct, mis à jour mon message. –

8

Ni; le premier est utilisé dans beaucoup d'endroits et le second a été introduit. Donc la question est plus quel style vous préférez. Je préfère la mise en forme à base dict:

d = { 'count': 1, 'txt': 'nice' } 
'This is %(count)d %(txt)s example!' % d 

Il veille à ce que le bon paramètre va dans le bon endroit, permet de réutiliser le même paramètre dans plusieurs endroits, etc.

+5

+1 pour l'approche par dict. Cela peut aussi être utilisé avec les locals() et globals() pour définir le dict! – cschol

+2

L'approche basée sur dict peut être émulée en utilisant la fonction format(), en passant '' ** d'' à format(), et en utilisant {}. – sykora