Cómo escribir una cadena muy larga que cumpla con PEP8 y evite E501

Resuelto Federer asked hace 14 años • 13 respuestas

PEP8 sugiere un límite de línea de 80 caracteres. Pero mi cadena supera el límite:

s = "this is my really, really, really, really, really, really, really long string that I'd like to shorten."

¿Cómo debo formatear eso para mantenerme dentro del límite de caracteres? p.ej,

s = (
    "this is my really, really, really, really, really, really" + 
    "really long string that I'd like to shorten."
)
Federer avatar Dec 09 '09 22:12 Federer
Aceptado

Dado que las constantes de cadena vecinas se concatenan automáticamente, puedes codificarlas así:

s = ("this is my really, really, really, really, really, really, "  
     "really long string that I'd like to shorten.")

Tenga en cuenta que no hay signo más y agregué la coma y el espacio adicionales que siguen al formato de su ejemplo.

Personalmente, no me gustan las barras invertidas y recuerdo haber leído en alguna parte que su uso está en desuso en favor de esta forma, que es más explícita. Recuerde "Lo explícito es mejor que lo implícito".

Considero que la barra invertida es menos clara y menos útil porque en realidad escapa del carácter de nueva línea. No es posible poner un comentario de final de línea después si fuera necesario. Es posible hacer esto con constantes de cadena concatenadas:

s = ("this is my really, really, really, really, really, really, " # comments ok
     "really long string that I'd like to shorten.")

Utilicé una búsqueda en Google de "longitud de línea de Python" que devuelve el enlace PEP8 como primer resultado, pero también enlaza a otra buena publicación de StackOverflow sobre este tema: "¿Por qué Python PEP-8 debería especificar una longitud de línea máxima de 79 caracteres? "

Otra buena frase de búsqueda sería "continuación de línea de Python".

Todd avatar Dec 09 '2009 15:12 Todd

La concatenación implícita podría ser la solución más limpia:

s = "this is my really, really, really, really, really, really," \
    " really long string that I'd like to shorten."

Editar Tras reflexionar, estoy de acuerdo en que la sugerencia de Todd de utilizar corchetes en lugar de continuación de línea es mejor por todas las razones que da. La única duda que tengo es que es relativamente fácil confundir cadenas entre corchetes con tuplas.

Michael Dunn avatar Dec 09 '2009 15:12 Michael Dunn

Creo que la palabra más importante de tu pregunta fue "sugiere".

Los estándares de codificación son cosas divertidas. A menudo, la orientación que brindan tiene una base realmente buena cuando se escribió (por ejemplo, la mayoría de los terminales no pueden mostrar más de 80 caracteres en una línea), pero con el tiempo se vuelven funcionalmente obsoletos, pero aún se cumplen estrictamente. Supongo que lo que hay que hacer aquí es sopesar los méritos relativos de "romper" esa sugerencia particular frente a la legibilidad y mantenibilidad de su código.

Lo siento, esto no responde directamente a tu pregunta.

ZombieSheep avatar Dec 09 '2009 15:12 ZombieSheep