2009-11-19 11 views
5

String Formatierung Ausdrücke:String Formatierung Ausdrücke (Python)

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

String Formatierung Methode aufruft:

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

Ich persönlich bevorzuge die Methodenaufrufe (zweites Beispiel) zur besseren Lesbarkeit, aber da es neu ist, Es besteht die Möglichkeit, dass die eine oder die andere im Laufe der Zeit missbilligt wird. Was denken Sie, ist weniger wahrscheinlich, veraltet zu sein?

+0

Wenn ein neues Formular eingeführt wird, ist nicht in der Regel die alte Form, die veraltet ist? – sykora

+1

Alles wird mit der Zeit veraltet. Was ist die Frage? –

Antwort

5

Die ursprüngliche Idee war, nach und nach zu umschalten auf str.format() Ansatz, während beide Richtungen ermöglicht:

PEP 3101:
Das neue System mit einem der Methodennamen der vorhandenen Zeichenfolge Formatierung nicht Techniken kollidieren, so können beide Systeme koexistieren unti Es ist an der Zeit, das ältere System abzulehnen.

Die Idee ist immer noch verfolgt:

Wir sind immer noch die Menschen ermutigen, die neue str.format() zu verwenden. Python Issue 7343

Da der ursprüngliche ‚%‘ Ansatz veraltet werden soll und an einem gewissen Punkt in der Zukunft entfernt, würde ich vorschlagen, neuen Code mit str.format Schreiben(). Obwohl es im Moment nur eine Frage der persönlichen Präferenz ist. Ich persönlich bevorzuge die Verwendung von wörterbuchbasierter Formatierung, die sowohl vom '%' Operator als auch von der str.format() Methode unterstützt wird.

6

Ich dachte, ich lese, dass der Operator % in 3.1 bereits veraltet ist, also würde ich mit der format() Funktion bleiben.

Siehe PEP 3101: A New Approach To String Formatting

+0

Huh? Wo hast du das gesehen? Es gibt nichts im Was ist neu bei http://docs.python.org/3.1/whatsnew/3.1.html –

+0

Ich bin 3.1 ausgeführt und es funktioniert, immer noch. – 3zzy

+0

Den richtigen Link gefunden, meinen Beitrag aktualisiert. –

8

Weder; der erste wird an vielen Orten verwendet und der zweite wurde gerade eingeführt. Die Frage ist eher, welchen Stil du bevorzugst. Ich ziehe es tatsächlich die dict basierte Formatierung:

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

Es stellt sicher, dass der richtige Parameter an die richtige Stelle geht, ermöglicht die gleichen Parameter an mehreren Stellen wieder zu verwenden usw.

+5

+1 für dict-basierten Ansatz. Dies kann auch mit locals() und globals() verwendet werden, um das dict zu definieren! – cschol

+2

Der dict-basierte Ansatz kann mit der Funktion format() emuliert werden, indem '' d'' an format() übergeben und {} verwendet wird. – sykora