2012-09-12 17 views
83

In Python sembra che ci siano due modi diversi di generare output formattato:Modo di stampa Python: con formato 'formato' o percentuale?

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)) 

C'è un modo per essere preferito sopra l'altro? Sono equivalenti, qual è la differenza? Quale forma dovrebbe essere usata, specialmente per Python3?

risposta

85

Utilizzare il metodo format, soprattutto se si è interessati a Python 3 e al futuro. Da the documentation:

Le operazioni di formattazione descritte qui [sostituzioni%] sono obsolete e potrebbero andare via nelle versioni future di Python. Utilizzare la nuova formattazione delle stringhe nel nuovo codice.

+14

Nuova documentazione dice questo sull'operatore percentuale: "Le operazioni di formattazione descritte qui mostrano una varietà di stranezze che portano a un numero di errori comuni ... "ma è ** non ** deprecato. http://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting – guettli

+2

Non è ufficialmente deprecato, ma sei incoraggiato a non usarlo. – BrenBarn

+1

Correlati: http://bugs.python.org/issue14123 – guettli

5

The docs dire che il metodo format è preferito per il nuovo codice. Al momento non ci sono piani per rimuovere la formattazione%, comunque.

18

.format è stato introdotto nel python2.6

Se avete bisogno di compatibilità a ritroso con i precedenti Python, è necessario utilizzare %

Per python3 e successivi si dovrebbe usare .format di sicuro

.format è più potente di %. Porting % a .format è facile ma il contrario può essere non banale

+0

come è più potente? – yossi

+4

@yossi Ecco un esempio http://stackoverflow.com/a/3228928/174728. Ti consente anche di effettuare ricerche su chiave/indice 'importa sys ; "{[versione]}". format (vars (sys)) ' –

+2

che ne dite di: ' import sys; "% (versione) s"% (vars (sys)) ' – Pax0r

6

È possibile utilizzare entrambi. Nessuno ha detto che l'espressione di formattazione% è deprecata. Tuttavia, come affermato prima, la chiamata al metodo di formattazione è un po 'più potente. Nota anche che le espressioni% sono un po 'più concise e più facili da codificare. Provale e vedi cosa ti si addice

+0

Probabilmente vale la pena notare che il modulo 'logging' usa la sintassi'% '-like, quindi può essere preferito per ragioni di coerenza. – sshilovsky