2011-08-08 8 views
15

Estoy tratando de mantener/actualizar/reescritura/arreglar un poco de Python que se ve un poco como esto:Formato de salida en Python: la sustitución de varios% s con la misma variable

variable = """My name is %s and it has been %s since I was born. 
       My parents decided to call me %s because they thought %s was a nice name. 
       %s is the same as %s.""" % (name, name, name, name, name, name) 

hay pequeños fragmentos que se ven así en todo el guión, y me preguntaba si existe una manera más simple (¿más pitonica?) de escribir este código. He encontrado una instancia de esto que reemplaza la misma variable unas 30 veces, y se siente fea.

¿Es la única forma de evitar (en mi opinión) la fealdad dividirla en muchos pequeños fragmentos?

variable = """My name is %s and it has been %s since I was born.""" % (name, name) 
variable += """My parents decided to call me %s because they thought %s was a nice name.""" % (name, name) 
variable += """%s is the same as %s.""" % (name, name) 

Respuesta

47

utilizar un diccionario en su lugar.

var = '%(foo)s %(foo)s %(foo)s' % { 'foo': 'look_at_me_three_times' } 

O format con numeración explícita.

var = '{0} {0} {0}'.format('look_at_meeee') 

Bien, o format con parámetros nombrados.

var = '{foo} {foo} {foo}'.format(foo = 'python you so crazy') 
+3

Su última opción se lee muy bien, muchas gracias, ¡justo lo que esperaría de Python! – alexmuller

5

utilizar el nuevo string.format: cadenas

name = 'Alex' 
variable = """My name is {0} and it has been {0} since I was born. 
      My parents decided to call me {0} because they thought {0} was a nice name. 
      {0} is the same as {0}.""".format(name) 
5
>>> "%(name)s %(name)s hello!" % dict(name='foo') 
'foo foo hello!' 
2
variable = """My name is {0} and it has been {0} since I was born. 
       My parents decided to call me {0} because they thought {0} was a nice name. 
       {0} is the same as {0}.""".format(name) 
3

utilizar el formato:

>>> variable = """My name is {name} and it has been {name} since...""" 
>>> n = "alex" 
>>> 
>>> variable.format(name=n) 
'My name is alex and it has been alex since...' 

El texto dentro de la {} puede ser un descriptor o un valor de índice .

Otro truco sofisticado es usar un diccionario para definir múltiples variables en combinación con el operador **.

>>> values = {"name": "alex", "color": "red"} 
>>> """My name is {name} and my favorite color is {color}""".format(**values) 
'My name is alex and my favorite color is red' 
>>> 
Cuestiones relacionadas