¿Cómo puedo dividir esta larga fila en Python? [duplicar]

Resuelto Gattster asked hace 14 años • 6 respuestas

¿Cómo harías para formatear una línea larga como esta? Me gustaría que no tenga más de 80 caracteres de ancho:

logger.info("Skipping {0} because its thumbnail was already in our system as {1}.".format(line[indexes['url']], video.title))

¿Es esta mi mejor opción?

url = "Skipping {0} because its thumbnail was already in our system as {1}."
logger.info(url.format(line[indexes['url']], video.title))
Gattster avatar Jan 14 '10 00:01 Gattster
Aceptado

Ese es un comienzo. No es una mala práctica definir cadenas más largas fuera del código que las utiliza. Es una forma de separar datos y comportamiento. Su primera opción es unir cadenas literales implícitamente haciéndolas adyacentes entre sí:

("This is the first line of my text, "
"which will be joined to a second.")

O con continuaciones de final de línea, que son un poco más frágiles, ya que esto funciona:

"This is the first line of my text, " \
"which will be joined to a second."

Pero esto no:

"This is the first line of my text, " \ 
"which will be joined to a second."

¿Ver la diferencia? ¿No? Bueno, tampoco lo harás cuando sea tu código.

(Hay un espacio después \en el segundo ejemplo).

La desventaja de la unión implícita es que solo funciona con cadenas literales, no con cadenas tomadas de variables, por lo que las cosas pueden ponerse un poco más complicadas cuando se refactoriza. Además, sólo puede interpolar el formato en la cadena combinada en su conjunto.

Alternativamente, puedes unirte explícitamente usando el operador de concatenación ( +):

("This is the first line of my text, " + 
"which will be joined to a second.")

Explícito es mejor que implícito, como dice el zen de Python, pero esto crea tres cadenas en lugar de una, y usa el doble de memoria: están las dos que has escrito, más una que son las dos unidas, así que Hay que saber cuándo ignorar el zen. La ventaja es que puedes aplicar formato a cualquiera de las subcadenas por separado en cada línea, o al conjunto completo fuera de los paréntesis.

Finalmente, puedes usar cadenas entre comillas triples:

"""This is the first line of my text
which will be joined to a second."""

Este suele ser mi favorito, aunque su comportamiento es ligeramente diferente ya que la nueva línea y cualquier espacio en blanco inicial en las líneas posteriores aparecerán en la cadena final. Puede eliminar la nueva línea con una barra invertida de escape.

"""This is the first line of my text \
which will be joined to a second."""

Esto tiene el mismo problema que la misma técnica anterior, en el sentido de que el código correcto solo se diferencia del código incorrecto por espacios en blanco invisibles.

Cuál es "mejor" depende de su situación particular, pero la respuesta no es simplemente estética, sino de comportamientos sutilmente diferentes.

jcdyer avatar Jan 13 '2010 17:01 jcdyer

El compilador une cadenas literales consecutivas y las expresiones entre paréntesis se consideran una sola línea de código:

logger.info("Skipping {0} because it's thumbnail was "
  "already in our system as {1}.".format(line[indexes['url']],
  video.title))
Ignacio Vazquez-Abrams avatar Jan 13 '2010 17:01 Ignacio Vazquez-Abrams