Como PEP8 sugiere mantener debajo de la regla de 80 columnas para su programa de Python, ¿cómo puedo cumplir con las cadenas largas?
s = "this is my really, really, really, really, really, really, really long string that I'd like to shorten."
¿Cómo haría para expandir esto a la siguiente línea, es decir
s = "this is my really, really, really, really, really, really" +
"really long string that I'd like to shorten."
Además, debido a que las constantes de cadena vecinas se concatenan automáticamente, también puede codificarlo así:
Tenga en cuenta que no hay signo más, y agregué la coma extra y el espacio que sigue al formato de su ejemplo.
Personalmente, no me gustan las barras invertidas, y recuerdo haber leído en alguna parte que su uso en realidad está en desuso a favor de este formulario, que es más explícito. Recuerde que "explícito es mejor que implícito".
Considero que la barra invertida es menos clara y menos útil porque en realidad se está escapando del carácter de nueva línea. No es posible poner un comentario de final de línea después de él si fuera necesario. Es posible hacer esto con constantes de cadena concatenadas:
Utilicé una búsqueda en Google de "longitud de línea de python" que devuelve el enlace PEP8 como primer resultado, pero también enlaces a otra buena publicación de StackOverflow sobre este tema: " ¿Por qué Python PEP-8 debe 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".
fuente
"str1" + "str2"
lugar de"str1" "str2"
('this is my really, really, really, really, really long {} ' 'that I'd really, really, really, like to {}').format(var1, var2))
Creo que la palabra más importante en su pregunta fue "sugiere".
Los estándares de codificación son cosas divertidas. A menudo, la guía que proporcionan tiene una base realmente buena cuando se escribió (por ejemplo, la mayoría de los terminales no pueden mostrar> 80 caracteres en una línea), pero con el tiempo se vuelven funcionalmente obsoletos, pero aún se adhieren rígidamente. Supongo que lo que debe hacer aquí es sopesar los méritos relativos de "romper" esa sugerencia particular frente a la legibilidad y mantenibilidad de su código.
Lo sentimos, esto no responde directamente a su pregunta.
fuente
Perdió un espacio y probablemente necesite un carácter de continuación de línea, es decir. a
\
.o incluso:
Parens también funcionaría en lugar de la continuación de la línea, pero se arriesga a que alguien piense que tiene la intención de tener una tupla y acaba de olvidar una coma. Toma por ejemplo:
versus:
Con la escritura dinámica de Python, el código puede ejecutarse de cualquier manera, pero produce resultados incorrectos con el que no tenía la intención.
fuente
Barra invertida:
o envolver en parens:
fuente
Estas son todas excelentes respuestas, pero no pude encontrar un complemento de editor que me ayudara a editar cadenas "concatenadas implícitamente", así que escribí un paquete para que me sea más fácil.
En pip (instale los párrafos) si quienquiera que esté vagando por este viejo hilo le gustaría verlo. Formatea cadenas de varias líneas como lo hace html (comprime espacios en blanco, dos líneas nuevas para un nuevo párrafo, no te preocupes por los espacios entre líneas).
se convierte en ...
Todo se alinea fácilmente con (Vim) 'gq'
fuente
Con un
\
puede expandir declaraciones a varias líneas:Deberia trabajar.
fuente
Tiendo a usar un par de métodos no mencionados aquí para especificar cadenas grandes, pero estos son para escenarios muy específicos. YMMV ...
Bloques de texto de varias líneas, a menudo con tokens formateados (no exactamente lo que estaba preguntando, pero aún útil):
Haga crecer la variable pieza por pieza a través del método de interpolación de cadenas que prefiera:
Léelo de un archivo. PEP-8 no limita la longitud de las cadenas en un archivo; solo las líneas de tu código. :)
Use la fuerza bruta o su editor para dividir la cadena en líneas manejables usando líneas nuevas y luego elimine todas las líneas nuevas. (Similar a la primera técnica que enumeré):
fuente
Opciones Disponibles:
"foo" \ "bar"
"foo" + \ "bar"
("foo" "bar")
("foo" + "bar")
Evitar
Evite los corchetes con coma:
("foo", "bar")
que define una tupla.fuente
Si debe insertar un literal de cadena larga y desea que flake8 se cierre, puede usar sus directivas de cierre . Por ejemplo, en una rutina de prueba definí alguna entrada falsa de CSV. Descubrí que dividirlo en más líneas que tenía filas sería muy confuso, así que decidí agregar un de la
# noqa: E501
siguiente manera:fuente
He usado textwrap.dedent en el pasado. Es un poco engorroso, así que prefiero continuar con las líneas ahora, pero si realmente quieres la sangría de bloque, creo que es genial.
Código de ejemplo (donde el recorte es deshacerse del primer '\ n' con un corte):
Explicación:
dedent calcula la sangría en función del espacio en blanco en la primera línea de texto antes de una nueva línea. Si desea modificarlo, puede volver a implementarlo fácilmente utilizando el
re
módulo.Este método tiene limitaciones porque las líneas muy largas pueden ser más largas de lo que desea, en cuyo caso otros métodos que concatenan cadenas son más adecuados.
fuente
x[1:]
, puede colocar una barra invertida despuésx = """
para evitar la primera línea nueva.