2011-01-17 8 views

Respuesta

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

Interesante. ¿Por qué funciona con '" str ".format (args)' pero no '" str "% args'? –

+2

@Rosarch: Porque la sintaxis '{n}' solo funciona para 'str.format()', no 'str .__ mod __()'. –

+1

@Rosarch: supongo que has mezclado la nueva forma con la antigua forma de formatear porque a la vieja usanza no usan '{}' como marcadores de posición :), pero usar '.format()' es la nueva forma de las cadenas de formateo eche un vistazo al pep 3101 para más detalles: http://www.python.org/dev/peps/pep-3101/ – mouad

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

es cierto, pero otra respuesta larga. Solo para mostrarle otro punto de vista sobre el problema;)

+1

+1 porque no sabía que podría hacer esto, y prefiero la legibilidad –

5

Python 3 tiene exactamente esa sintaxis, excepto que el operador % es ahora el método format. str.format también se ha agregado a Python 2.6+ para facilitar la transición a Python 3. Consulte format string syntax para obtener más detalles.

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

Sin embargo, no se puede hacer con una tupla en las versiones anteriores de Python. Puede acercarse utilizando las teclas de mapeo entre paréntesis. Con las claves de asignación, los valores de formato se deben pasar como un dict en lugar de una tupla.

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

Desde el Python manual:

Cuando el argumento de la derecha es un diccionario (u otro tipo de asignación), entonces los formatos de la cadena deben incluir una asignación de claves parenthesised en ese diccionario insertados inmediatamente después de la '%' personaje. La clave de mapeo selecciona el valor a formatear de la asignación.

Cuestiones relacionadas