online - pep8 python 3
¿Cómo puedo hacer que mi código Python se mantenga por debajo de 80 caracteres por línea? (4)
Agregaría dos puntos a las respuestas anteriores:
Las cadenas se pueden concatenar automáticamente, lo cual es muy conveniente:
this_is_a_long_string = ("lkjlkj lkj lkj mlkj mlkj mlkj mlkj mlkj mlkj "
"rest of the string: no string addition is necessary!"
" You can do it many times!")
Tenga en cuenta que esto es eficiente: esto no da como resultado concatenaciones de cadenas en el intérprete de Python: en cambio, esto simplemente se considera como un único literal de cadena larga, por lo que es eficiente.
Una pequeña advertencia relacionada con la respuesta de Devin: la sintaxis de "paréntesis" en realidad no "funciona universalmente". Por ejemplo, d [42] = "H22G" no se puede escribir como
(d
[42] = "H2G2")
porque los paréntesis solo se pueden usar alrededor de la expresión "calculada" (esto no incluye una asignación (=) como la anterior).
Otro ejemplo es el siguiente código, que genera un error de sintaxis:
with (open("..... very long file name .....")
as input_file):
De hecho, los paréntesis no se pueden colocar enunciados, más generalmente (solo expresiones).
En estos casos, uno puede usar la sintaxis "/" o, mejor (ya que "/" debe evitarse si es posible), divida el código en varias sentencias.
He escrito algo de Python en el que algunas líneas superan los 80 caracteres, que es un umbral en el que necesito permanecer. ¿Cómo puedo adaptar mi código para reducir las longitudes de línea?
Mi editor actual (Kate) se ha configurado para introducir un salto de línea en los límites de las palabras siempre que la longitud de la línea alcance o supere los 80 caracteres. Esto hace que sea inmediatamente obvio que he sobrepasado los límites. Además, hay una línea roja que marca la posición de 80 caracteres, lo que me da una advertencia anticipada de cuándo va a fluir la línea. Estos me permiten planificar líneas lógicas que se adaptarán a múltiples líneas físicas.
En cuanto a cómo encajarlos realmente, hay varios mecanismos. Puede terminar la línea con un /, pero esto es propenso a errores.
# works
print 4 + /
2
# doesn''t work
print 4 + /
2
¿La diferencia? La diferencia es invisible: hubo un espacio en blanco después de la barra invertida en el segundo caso. Oops!
¿Qué debería hacerse en su lugar? Bueno, rodéelo entre paréntesis.
print (4 +
2)
No es necesario. Esto realmente funciona universalmente, nunca necesitarás /. ¡Incluso para los límites de acceso a los atributos!
print (foo
.bar())
Para las cadenas, puede agregarlas explícitamente o implícitamente utilizando la combinación estilo C.
# all of these do exactly the same thing
print ("123"
"456")
print ("123" +
"456")
print "123456"
Finalmente, todo lo que estará en cualquier forma de corchete ((), []. {}), No solo paréntesis en particular, puede tener un salto de línea colocado en cualquier lugar. Entonces, por ejemplo, puedes usar un literal de lista sobre varias líneas, siempre que los elementos estén separados por una coma.
Todo esto y más se pueden encontrar en la documentación oficial de Python. Además, una nota rápida, PEP-8 especifica 79 caracteres como el límite, no 80 - si tiene 80 caracteres, ya lo ha superado.
Si el código que excede 80 caracteres es una llamada a la función (o definición), rompa la línea del argumento. Python reconocerá el paréntesis y lo verá como una sola línea.
function(arg, arg, arg, arg,
arg, arg, arg...)
Si el código que supera los 80 caracteres es una línea de código que no se puede romper de forma natural, puede utilizar la barra invertida /
para "escapar" de la nueva línea.
some.weird.namespace.thing.that.is.long = '',''.join(strings) + /
''another string''
También puede usar el paréntesis para su ventaja.
some.weird.namespace.thing.that.is.long = ('',''.join(strings) +
''another string'')
Todos los tipos de corchetes {} (dict / set), [] (list), () (tuplas) se pueden dividir en varias líneas sin problemas. Esto permite un formato más agradable.
mydict = {
''key'': ''value'',
''yes'': ''no''
}
Idiomatic Python dice:
Use barras diagonales inversas como último recurso
Entonces, si es posible usar paréntesis ()
, evite barras invertidas. Si tiene un a.train.wreck.that.spans.across.a.dozen.cars.and-multiple.lines.across.the.whole.trainyard.and.several.states()
haga algo como:
lines = a.train.wreck.that.spans.across.a.dozen.cars.and-multiple.lines
lines.across.the.whole.trainyard.and.several.states()
O, preferiblemente, refactorice su código. Por favor.