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?¿Cómo puedo hacer que mi código de Python permanezca por debajo de 80 caracteres por línea?
Respuesta
Si el código que supera los 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 superior a 80 caracteres es una línea de código que no es naturalmente frágil, 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 soportes fijos {} (dict/set), [] (lista),() (tuplas) se puede dividir en varias líneas sin problemas. Esto permite un formato más agradable.
mydict = {
'key': 'value',
'yes': 'no'
}
¿por qué no? 'thing = some.weird .namespace.thing.that', 'thing.long = ','. join (cadenas) + 'otra cadena'' – guyskk
Mi actual editor (Kate) se ha configurado para introducir un salto de línea en los límites de palabra siempre que la longitud de la línea alcanza o supera 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 encajarlas realmente, existen 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é se debe hacer en su lugar? Bueno, rodéelo entre paréntesis.
print (4 +
2)
No \ needed. Esto realmente funciona universalmente, nunca necesitarás \. ¡Incluso para los límites de acceso a los atributos!
print (foo
.bar())
Para las cadenas, se puede añadir de forma explícita, implícita o usando C-estilo de unión.
# all of these do exactly the same thing
print ("123"
"456")
print ("123" +
"456")
print "123456"
Finalmente, cualquier cosa que pueda estar en cualquier forma de soporte ((), []. {}), No sólo 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 el official documentation para 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.
** Por favor, use backlashes SOLAMENTE como último recurso ** (ver el enlace en mi respuesta a continuación) – Kimvais
'La diferencia es invisible-- había un carácter de espacio en blanco en el segundo caso'. ... después de la barra diagonal inversa, es solo mencionar. – Boldewyn
@Kimvais: ¿No es exactamente eso lo que Devin sugiere aquí? Incluso muestra un error de ejemplo, que lleva a esta recomendación. – Boldewyn
Idiomatic Python dice:
Use backslashes as a last resort
Por lo tanto, si se utilizan paréntesis ()
es posible, evitar las barras invertidas. Si usted tiene un a.train.wreck.that.spans.across.a.dozen.cars.and-multiple.lines.across.the.whole.trainyard.and.several.states()
hacer 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, refactorizar su código. Por favor.
Si necesita imprimir, por ejemplo, una gran cantidad de texto estático, una instrucción de uso para una secuencia de comandos CLI, por ejemplo, me gustaría ver cómo lo 'refactoriza'. – Boldewyn
usando 'print (" "" ... text ... "" ")' o 'print (" text "" text "" text ")' – Kimvais
python3.6 f-string 'print (f '{text: -^80} ') 'o' print (' {: -^80} '. Formato (texto)) ' – guyskk
me gustaría añadir dos puntos a las respuestas anteriores:
Las cadenas pueden ser concatenadas automáticamente, lo que 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 este es eficiente: esto hace no resultado en la cadena concatenaciones 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 "paréntesis" en realidad no "funciona universalmente". Por ejemplo, d [42] = "H22G" no puede ser escrito como
(d
[42] = "H2G2")
porque paréntesis, sólo se pueden utilizar en torno a "calculan" expresión (esto no incluye una asignación (=) como arriba).
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 poner alrededor de declaraciones, más en general (sólo expresiones).
En estos casos, uno puede usar la sintaxis "\" o, mejor (ya que "se debe evitar" si es posible), divida el código en varias instrucciones.
- 1. ¿Cómo puedo mantener el código de Python por debajo de 80 caracteres sin hacerlo feo?
- 2. ejecutar python código fuente línea por línea
- 3. ¿Cómo puedo hacer que las líneas de envoltura de Visual Studio tengan 80 caracteres?
- 4. ¿Cuáles son buenas maneras de hacer que mi código Python se ejecute por primera vez?
- 5. ¿Cómo puedo hacer que mi código sobreviva? (anti software rot)
- 6. ¿Cómo puedo crear un perfil de código python línea por línea?
- 7. PEP8 - 80 caracteres - Entero grande
- 8. Mostrar línea de margen de 80 caracteres en TextMate
- 9. ¿Cómo hacer para que la ventana permanezca abierta después de ejecutar el código de C++?
- 10. Cómo hacer que mi código sea rápido
- 11. ¿Cómo puedo hacer que este código Pythonic
- 12. ¿Cómo puedo hacer que mi dispositivo vibre?
- 13. Jquery - Truncar texto por línea (no por número de caracteres)
- 14. Depuración de código Java línea por línea
- 15. ¿Cómo puedo hacer que este código python sea menos feo
- 16. Python: ¿cómo puedo hacer que este código sea asíncrono?
- 17. ¿Cómo borrar línea (s) por debajo de la línea actual en vim?
- 18. ¿Por qué mi bloque de código inseguro es más lento que mi código de seguridad?
- 19. ¿Cómo puedo hacer que apt-get install a mi virtualenv?
- 20. Depuración: ¿cómo ejecuto el código línea por línea?
- 21. ¿Por qué mi programa Python promedia solo el 33% de CPU por proceso? ¿Cómo puedo hacer que Python use toda la CPU disponible?
- 22. ¿Cómo puedo hacer que eclipse imprima caracteres extraños en Unicode?
- 23. Analizador de memoria de línea por línea Python?
- 24. ¿Cómo hacer una lista de cambios por línea de comando?
- 25. ¿Cómo puedo hacer que mi objeto de física se calme?
- 26. ¿Cómo puedo hacer que mi aplicación web J2EE trabaje fuera de línea?
- 27. ¿Por qué no puedo "guardar como" un archivo Excel de mi código Python?
- 28. ¿Dónde puedo obtener una revisión por pares del código y cómo obtener mi código de atención?
- 29. ¿Cómo puedo hacer un salto de línea (continuación de línea) en Python?
- 30. ¿Por qué el ancho del terminal predeterminado es de 80 caracteres?
Mantener el código por debajo de 80 columnas es algo que debería haber muerto hace una década. Apuntar a terminales 80x25 es absurdo y lleva a un código horrible. –
@Glenn Maynard: Estoy totalmente en desacuerdo. La mayoría de las personas aún usan ventanas de editor de 80 caracteres, ya que generalmente hay más de una ventana que desea mantener visible. – Kimvais
Haz lo que quieras, pero ciertamente no estoy desfigurando mi código para ayudar a las personas que insisten en editar el código en ventanas pequeñas. La respuesta de Devin muestra cuán horrible y antinatural es el código cuando haces esto. Un límite razonable es alrededor de 120 columnas. –