2009-11-19 4 views
5

espressioni formattazione di stringhe:formattazione di stringhe espressioni (Python)

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

String metodo di formattazione chiama:

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

Io personalmente preferisco le chiamate di metodo (secondo esempio) per migliorare la leggibilità, ma dal momento che è nuovo, c'è una possibilità che l'uno o l'altro di questi possa diventare deprecato nel tempo. Quale pensi sia meno probabile essere deprecato?

+0

Quando viene introdotto un nuovo modulo, non è in genere il vecchio modulo deprecato? – sykora

+1

Tutto diventa deprecato nel tempo. Quale è la domanda? –

risposta

5

L'idea originale era di poco a poco passa a str.format() approccio consentendo entrambi i modi:

PEP 3101:
il nuovo sistema non si scontra con uno qualsiasi dei nomi dei metodi della stringa esistente formattazione tecniche, in modo che entrambi i sistemi possono coesistere unti arriva il momento di deprecare il vecchio sistema.

l'idea è ancora in fase di perseguito:

Stiamo ancora incoraggiare le persone a utilizzare il nuovo str.format(). Python Issue 7343

Dal momento che l'approccio originale '%' è previsto per essere deprecato e rimosso ad un certo punto in futuro, vorrei suggerire a scrivere nuovo codice con str.format(). Anche se al momento, è solo una questione di preferenze personali. Personalmente preferisco usare la formattazione basata sul dizionario, che è supportata sia dal metodo '%' sia dal metodo str.format().

6

Pensavo di aver letto che l'operatore % è stato deprecato già in 3.1, quindi mi attenevo alla funzione format().

Vedi PEP 3101: A New Approach To String Formatting

+0

Eh? dove l'hai visto? Non c'è nulla nel What's New in http://docs.python.org/3.1/whatsnew/3.1.html –

+0

Sono in esecuzione 3.1 e funziona, ancora. – 3zzy

+0

Trovato il link corretto, aggiornato il mio post. –

8

Né; il primo è utilizzato in molti posti e il secondo è stato appena introdotto. Quindi la domanda è più quale stile preferisci. Io in realtà preferisco la formattazione dict base:

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

Si fa in modo che il parametro destra va al posto giusto, permette di riutilizzare lo stesso parametro in più luoghi, ecc

+5

+1 per approccio dettato. Questo può anche essere usato con locals() e globals() per definire il dict! – cschol

+2

L'approccio basato su dict può essere emulato usando la funzione format(), passando '' ** d'' a format() e usando {}. – sykora