¿Cómo puedo hacer un salto de línea (continuación de línea) en Python?

Tengo una larga línea de código que quiero dividir entre varias líneas. ¿Qué uso y qué es la syntax?

Por ejemplo, añadiendo un montón de cadenas,

e = 'a' + 'b' + 'c' + 'd' 

y tenerlo en dos líneas como esta:

 e = 'a' + 'b' + 'c' + 'd' 

¿Cuál es la línea? Solo puede tener argumentos en la siguiente línea sin ningún problema:

 a = dostuff(blahblah1, blahblah2, blahblah3, blahblah4, blahblah5, blahblah6, blahblah7) 

De lo contrario puedes hacer algo como esto:

 if a == True and \ b == False 

Consulte la guía de estilo para más información.

De su línea de ejemplo:

 a = '1' + '2' + '3' + \ '4' + '5' 

O:

 a = ('1' + '2' + '3' + '4' + '5') 

Tenga en cuenta que la guía de estilo dice que es preferible utilizar la continuación implícita con paréntesis, pero en este caso en particular, simplemente agregar paréntesis alrededor de su expresión es probablemente el camino equivocado.

De la guía de estilo para el código de Python :

La forma preferida de ajustar líneas largas es mediante el uso de la continuación de la línea implícita de Python entre paréntesis, corchetes y llaves. Las líneas largas se pueden dividir en varias líneas envolviendo expresiones entre paréntesis. Estos se deben usar en lugar de usar una barra invertida para la continuación de la línea.

Las barras invertidas pueden ser apropiadas a veces. Por ejemplo, las declaraciones largas y múltiples no pueden usar la continuación implícita, por lo que las barras invertidas son aceptables:

 with open('/path/to/some/file/you/want/to/read') as file_1, \ open('/path/to/some/file/being/written', 'w') as file_2: file_2.write(file_1.read()) 

Otro tal caso es con aseveraciones.

Asegúrese de sangrar la línea continua adecuadamente. El lugar preferido para romper alrededor de un operador binario es después del operador, no antes. Algunos ejemplos:

 class Rectangle(Blob): def __init__(self, width, height, color='black', emphasis=None, highlight=0): if (width == 0 and height == 0 and color == 'red' and emphasis == 'strong' or highlight > 100): raise ValueError("sorry, you lose") if width == 0 and height == 0 and (color == 'red' or emphasis is None): raise ValueError("I don't think so -- values are %s, %s" % (width, height)) Blob.__init__(self, width, height, color, emphasis, highlight) 

EDITAR: PEP8 ahora recomienda la convención opuesta (para romper en operaciones binarias) utilizada por los matemáticos y sus editores para mejorar la legibilidad.

El estilo de Donald Knuth de romper antes de que un operador binario alinee los operadores verticalmente, reduciendo así la carga de trabajo de los ojos al determinar qué elementos se agregan y se restan.

Desde PEP8: ¿Debería un salto de línea antes o después de un operador binario? :

Donald Knuth explica la regla tradicional en su serie Computers and Typesetting: “Aunque las fórmulas dentro de un párrafo siempre se rompen después de las operaciones y relaciones binarias, las fórmulas mostradas siempre se rompen antes de las operaciones binarias” [3].

Siguiendo la tradición de las matemáticas, generalmente se obtiene un código más legible:

 # Yes: easy to match operators with operands income = (gross_wages + taxable_interest + (dividends - qualified_dividends) - ira_deduction - student_loan_interest) 

En el código Python, se permite romper antes o después de un operador binario, siempre que la convención sea coherente a nivel local. Para el nuevo código se sugiere el estilo de Knuth.

[3]: The TeXBook de Donald Knuth, páginas 195 y 196

El peligro de usar una barra invertida para finalizar una línea es que si se agrega un espacio en blanco después de la barra invertida (lo cual, por supuesto, es muy difícil de ver), la barra diagonal inversa ya no hace lo que pensaba que era.

Consulte Python Idioms and Anti-Idioms (para Python 2 o Python 3 ) para obtener más información.

Ponga una \ al final de su línea o incluya la statement en parens ( .. ) . Desde IBM :

 b = ((i1 < 20) and (i2 < 30) and (i3 < 40)) 

o

 b = (i1 < 20) and \ (i2 < 30) and \ (i3 < 40) 

Puedes romper líneas entre paréntesis y llaves. Además, puede agregar el carácter de barra diagonal inversa a una línea para romperlo explícitamente:

 x = (tuples_first_value, second_value) y = 1 + \ 2 

De la boca del caballo: línea explícita de unión.

Se pueden unir dos o más líneas físicas en líneas lógicas usando caracteres de barra invertida ( \ ), de la siguiente manera: cuando una línea física termina en una barra diagonal inversa que no forma parte de un literal de cadena o comentario, se une con lo siguiente formando una única lógica línea, eliminando la barra diagonal inversa y el siguiente carácter de fin de línea. Por ejemplo:

 if 1900 < year < 2100 and 1 <= month <= 12 \ and 1 <= day <= 31 and 0 <= hour < 24 \ and 0 <= minute < 60 and 0 <= second < 60: # Looks like a valid date return 1 

Una línea que termina en una barra invertida no puede llevar un comentario. Una barra invertida no continúa un comentario. Una barra invertida no continúa con un token a excepción de los literales de cadena (es decir, los tokens que no sean literales de cadena no se pueden dividir entre líneas físicas mediante una barra invertida). Una barra invertida es ilegal en otro lugar en una línea fuera de una cadena literal.

Puede que no sea la forma de Pythonic, pero generalmente uso la función de lista con combinación para escribir una cadena larga como consultas SQL.

 query = " ".join([ 'SELECT * FROM "TableName"', 'WHERE "SomeColumn1"=VALUE', 'ORDER BY "SomeColumn2"', 'LIMIT 5;' ]) 

Tomado de la Guía del autostopista a Python ( Continuación de línea ):

Cuando una línea de código lógica es más larga que el límite aceptado, debe dividirla en varias líneas físicas. El intérprete de Python se unirá a líneas consecutivas si el último carácter de la línea es una barra invertida. Esto es útil en algunos casos, pero por lo general debe evitarse debido a su fragilidad: un espacio en blanco agregado al final de la línea, después de la barra invertida, romperá el código y puede tener resultados inesperados.

Una mejor solución es usar paréntesis alrededor de sus elementos. Si se deja un paréntesis no cerrado en un final de línea, el intérprete de Python se unirá a la línea siguiente hasta que se cierren los paréntesis. El mismo comportamiento se mantiene para los frenos y los apoyos cuadrados.

Sin embargo , la mayoría de las veces, tener que dividir una línea lógica larga es una señal de que está intentando hacer demasiadas cosas al mismo tiempo, lo que puede dificultar la legibilidad.

Dicho esto, aquí hay un ejemplo con respecto a las importaciones múltiples (cuando se exceden los límites de línea, definidos en PEP-8 ):

 from app import ( app, abort, make_response, redirect, render_template, request, session )