2012-06-11 20 views
27

Digamos que tengo una cadena extremadamente larga con argumentos que quiero crear. Sé que usted puede crear una cadena de varias líneas conCadena de líneas múltiples con argumentos. Cómo declarar?

cmd = """line 1 
     line 2 
     line 3""" 

Pero ahora digamos que quiero pasar 1, 2 y 3 como argumentos.

Esto funciona

cmd = """line %d 
     line %d 
     line %d""" % (1, 2, 3) 

Pero si tengo un súper larga cadena con más de 30 argumentos, ¿Cómo es posible pasar esos argumentos en múltiples líneas? Pasarlos en una sola línea frustra el propósito de intentar crear una cadena multilínea.

Gracias a cualquiera de antemano por su ayuda y comprensión.

Respuesta

19

Puede abusar de las propiedades de continuación de línea del paréntesis ( y la coma ,.

cmd = """line %d 
     line %d 
     line %d""" % (
     1, 
     2, 
     3) 
+0

Muchas gracias. Exactamente lo que estaba buscando. Nunca supe que podría tener varias líneas al usar corchetes. ¡Esto es de gran ayuda! – Quillion

2

Esto funciona para mí:

cmd = """line %d 
     line %d 
     line %d""" % (
      1, 
      2, 
      3 
    ) 
3

Para que los argumentos en la misma línea que se insertan, podría hacerlo de esta manera:

cmd = "line %d\n"%1 +\ 
     "line %d\n"%2 +\ 
     "line %d\n"%3 

[EDIT:] En Responder al primer comentario que surgió con esto:

cmd = "\n".join([ 
     "line %d"%1, 
     "line %d"%2, 
     "line %d"%3]) 
+0

Hacer eso con más de 30 argumentos no sería muy eficiente. ' "" .join()' en una lista, por otro lado ... :) 1 –

48

Puede usar la función str.format(), que permite argumentos con nombre. Así,

'''line {0} 
line {1} 
line {2}'''.format(1,2,3) 

Por supuesto podría extender esta usando la sintaxis de Python *args para que pueda pasar en un tuple o list.

args = (1,2,3) 
'''line {0} 
line {1} 
line {2}'''.format(*args) 

Si puede nombrar de forma inteligente sus argumentos, la solución más robusta (aunque la mayor parte de una tipificación intensiva) sería el uso de la sintaxis de Python **kwargs para pasar en un diccionario.

args = {'arg1':1, 'arg2':2, 'arg3':3} 
'''line {arg1} 
line {arg2} 
line {arg3}'''.format(**args) 

Para obtener más información sobre el mini-lenguaje str.format(), vaya aquí: http://docs.python.org/library/string.html#format-string-syntax

+1

El formato ** kwargs es grande para facilitar la lectura para muchos escenarios (aunque quizás no el ejemplo de la OP). – Darthfett

2

una variante más con el string.format() - Función.

s = "{0} " \ 
    "{1} " \ 
    "{2}" \ 
    .format("Hello", "world", "from a multiline string")  
print(s) 
1

La forma más fácil podría ser utilizar literal string interpolation (disponible de Python 3.6 en adelante y suponiendo que todos los argumentos son en su alcance).

cmd = f"""line {1} 
     line {2} 
     line {3}""" 
Cuestiones relacionadas