2011-01-17 10 views

risposta

39
"{0} {1} {1}".format("foo", "bar") 
+1

Interessante. Perché funziona con '" str ".format (args)' ma non '" str "% args'? –

+2

@Rosarch: Poiché la sintassi '{n}' funziona solo per 'str.format()', non 'str .__ mod __()'. –

+1

@Rosarch: penso che tu abbia mescolato il nuovo modo con il vecchio modo di formattare perché il vecchio modo non usa '{}' come segnaposto :), ma usare '.format()' è il nuovo modo di formare stringhe dare un'occhiata al pep 3101 per maggiori dettagli: http://www.python.org/dev/peps/pep-3101/ – mouad

9
"%(foo)s %(foo)s %(bar)s" % { "foo" : "foo", "bar":"bar"} 

è un altro vero, ma risposta lunga. Solo per mostrarti un altro punto di vista sul problema;)

+1

+1 perché non sapevo che potessi fare questo e preferisco la leggibilità –

5

Python 3 ha esattamente questa sintassi, tranne che l'operatore % è ora il metodo format. str.format è stato inoltre aggiunto a Python 2.6+ per facilitare la transizione a Python 3. Vedere format string syntax per ulteriori dettagli.

Tuttavia, non è possibile eseguire con una tupla nelle versioni precedenti di Python. È possibile avvicinarsi utilizzando le chiavi di mappatura racchiuse tra parentesi. Con le chiavi di mappatura i valori di formato devono essere passati come dict invece di una tupla.

>>> '%(0)s %(1)s %(1)s' % {'0': 'foo', '1': 'bar'} 
'foo bar bar' 

Dal Python manual:

Quando l'argomento di destra è un dizionario (o un altro tipo di mappatura), quindi i formati nella stringa deve includere una chiave, tra parentesi, dizionario, inserita immediatamente dopo il '%' carattere. La chiave di mappatura seleziona il valore da formattare dalla mappatura.

Problemi correlati