2009-11-19 11 views
5

expresiones de cadenas: método de formateoexpresiones de cadenas (Python)

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

Cadena llama:

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

Yo personalmente prefiero las llamadas de método (segundo ejemplo) para facilitar la lectura, pero ya que es nuevo, existe la posibilidad de que una u otra de ellas se vuelva obsoleta con el tiempo. ¿Cuál crees que es menos probable que esté en desuso?

+0

Cuando se presenta un formulario nuevo, ¿no suele ser el formulario anterior que está en desuso? – sykora

+1

Todo se vuelve obsoleto con el tiempo. ¿Cuál es la pregunta? –

Respuesta

5

La idea original era que poco a poco cambiar a str.format() enfoque al tiempo que permite en ambos sentidos:

PEP 3101:
el nuevo sistema no colisiona con cualquiera de los nombres de los métodos de la cadena existente técnicas de formato, por lo que ambos sistemas pueden coexistir unti l llega el momento de desaprobar el sistema anterior.

La idea todavía está siendo perseguido: la gente

Seguimos alentando a utilizar la nueva str.format(). Python Issue 7343

Dado que está previsto el enfoque original '%' para ser obsoleto y eliminado en algún momento en el futuro, sugeriría a escribir el nuevo código con str.format(). Aunque por el momento, es solo una cuestión de preferencia personal. Personalmente prefiero utilizar el formato basado en diccionario, que es compatible con el método '%' y el método str.format().

6

Creo que he leído que el operador % está en desuso en 3.1, así que me quedaría con la función format().

Ver PEP 3101: A New Approach To String Formatting

+0

¿Huh? ¿Dónde viste eso? No hay nada en las novedades en http://docs.python.org/3.1/whatsnew/3.1.html –

+0

Estoy ejecutando 3.1 y funciona, aún. – 3zzy

+0

Encontré el enlace correcto, actualicé mi publicación. –

8

Ni; el primero se usa en muchos lugares y el segundo se acaba de presentar. Entonces la pregunta es qué estilo prefieres. Yo realmente prefiero el formato basado dict:

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

Se asegura de que el parámetro de la derecha entra en el lugar correcto, permite volver a utilizar el mismo parámetro en varios lugares, etc.

+5

+1 para un enfoque basado en dict. ¡Esto también se puede usar con locals() y globals() para definir el dict! – cschol

+2

El enfoque basado en dict se puede emular usando la función format(), pasando '' ** d'' a format(), y usando {}. – sykora

Cuestiones relacionadas