Pregunta

Tengo una larga línea de código que quiero dividir en varias líneas.¿Qué uso y cuál es la sintaxis?

Por ejemplo, agregando un montón de cadenas,

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

y lo tienes en dos líneas como esta:

e = 'a' + 'b' +
    'c' + 'd'
¿Fue útil?

Solución

¿Cuál es la línea?Puedes 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

Comprobar el 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 se prefiere usar la continuación implícita entre paréntesis, pero en este caso particular simplemente agregar paréntesis alrededor de su expresión probablemente sea el camino equivocado.

Otros consejos

De Guía de estilo para código Python:

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

Las barras invertidas pueden seguir siendo apropiadas en ocasiones.Por ejemplo, declaraciones with largas y múltiples no pueden usar continuación implícita, por lo que se aceptan barras invertidas:

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 caso similar es el de las declaraciones de afirmación.

Asegúrese de sangrar adecuadamente la línea continua.El lugar preferido para analizar un operador binario es después el operador, no antes que él.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 el convención opuesta (para descomponer operaciones binarias) utilizado por los matemáticos y sus editores para mejorar la legibilidad.

El estilo de break de Donald Knuth antes un operador binario alinea a los operadores verticalmente, reduciendo así la carga de trabajo del ojo al determinar qué elementos se suman y restan.

De PEP8:¿Debería una línea saltar antes o después de un operador binario?:

Donald Knuth explica la regla tradicional en su serie Computadoras y tipografía:"Aunque las fórmulas dentro de un párrafo siempre se interrumpen después de las operaciones y relaciones binarias, las fórmulas mostradas siempre se interrumpen antes de las operaciones binarias"[3].

Seguir la tradición de las matemáticas normalmente da como resultado 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, está permitido realizar una interrupción antes o después de un operador binario, siempre que la convención sea coherente a nivel local.Para el código nuevo 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 agregan espacios en blanco después de la barra invertida (lo cual, por supuesto, es muy difícil de ver), la barra invertida ya no hace lo que pensaba.

Consulte Modismos y antimodismos de Python (para Pitón 2 o Pitón 3) para más.

Poner un \ al final de su línea o incluya la declaración entre paréntesis ( .. ).De IBM:

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

o

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

Puede dividir líneas entre paréntesis y llaves.Además, puede agregar el carácter de barra invertida \ a una línea para dividirla explícitamente:

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

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

Se pueden unir dos o más líneas físicas en líneas lógicas utilizando caracteres de barra de inactividad (\), como sigue:Cuando una línea física termina en una barra de invertir que no es parte de una cadena literal o comentario, se une a la siguiente formación de una sola línea lógica, eliminando la barra de retroceso 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 de inactividad no continúa un comentario.Una barra invertida no continúa un token, excepto los literales de cadena (es decir, tokens distintos de los literales de cadena no se pueden dividir a través de líneas físicas usando una barra de inactividad).Una barra de invertir es ilegal en otra parte de una línea fuera de una cuerda literal.

Puede que no sea la forma pitónica, pero generalmente uso una lista con función de unió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 autoestopista Python (Continuación de línea):

Cuando una línea lógica de código es más larga que el límite aceptado, es necesario dividirla en varias líneas físicas.El intérprete de Python unirá líneas consecutivas si el último carácter de la línea es una barra invertida.Esto es útil en algunos casos, pero normalmente 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 generar resultados inesperados.

Una mejor solución es utilizar paréntesis alrededor de sus elementos. Si se deja un paréntesis abierto al final de la línea, el intérprete de Python se unirá a la siguiente línea hasta que se cierren los paréntesis.El mismo comportamiento se aplica a las llaves y a las llaves cuadradas.

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

Dicho esto, aquí hay un ejemplo sobre importaciones múltiples (cuando se excede límites de línea, definidos en PEP-8):

from app import (
    app, abort, make_response, redirect, render_template, request, session
)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top