Pergunta

Eu tenho uma longa linha de código que eu quero dividir entre várias linhas.O que devo usar e o que é a sintaxe?

Por exemplo, a adição de um grupo de seqüências de caracteres,

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

e tê-lo em duas linhas como esta:

e = 'a' + 'b' +
    'c' + 'd'
Foi útil?

Solução

O que é a linha?Você pode apenas ter argumentos na linha seguinte sem problemas:

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

Caso contrário, você pode fazer algo como isto:

if a == True and \
   b == False

Verifique o guia de estilo para obter mais informações.

A partir de sua linha de exemplo:

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

Ou:

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

Observe que o guia de estilo, diz que o uso implícito de continuação com parênteses é o preferido, mas, neste caso particular, apenas adicionando entre parênteses a expressão é, provavelmente, o caminho errado para ir.

Outras dicas

A partir de Guia de estilo de Código Python:

A forma preferencial de quebra longas linhas é usando Python implícitas de continuação de linha dentro de parênteses, colchetes e chaves. As linhas mais longas podem ser quebrado em várias linhas, envolvendo expressões entre parênteses.Estes devem ser usados de preferência a utilizar uma barra invertida para a continuação de linha.

Barras invertidas podem ainda ser adequado às vezes.Por exemplo, longo, com vários declarações não pode usar implícito continuação, então barras invertidas são aceitáveis:

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())

Outro caso é com instruções de declaração.

Certifique-se de recuo da linha contínua de forma adequada.O lugar preferido de quebra de cerca de um operador binário é depois de o operador, não antes.Alguns exemplos:

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 agora recomenda o em frente convenção (para quebrar em operações binárias) usado por Matemáticos e seus editores para melhorar a legibilidade.

Donald Knuth estilo de quebrar antes de um operador binário alinha os operadores verticalmente, reduzindo, assim, o olho da carga de trabalho, quando determinar quais itens são adicionados e subtraídos.

A partir de PEP8:Deve uma quebra de linha antes ou depois de um operador binário?:

Donald Knuth, explica a regra clássica em seus Computadores e Composição de série:"Apesar de fórmulas dentro de um parágrafo sempre quebram depois de binário operações e relações, apresentadas fórmulas de sempre quebrar antes de operações binárias"[3].

Seguindo a tradição da matemática geralmente resulta em código mais legível:

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

Em Python, é admissível a quebra antes ou depois de um operador binário, como a convenção é consistente localmente.Para o novo código Knuth estilo é sugerido.

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

O perigo de se utilizar uma barra invertida final de uma linha é que se o espaço em branco é adicionado após a barra invertida (o que, naturalmente, é muito difícil de ver), a barra não está mais fazendo o que você pensou que era.

Ver Python expressões Idiomáticas e Anti-expressões Idiomáticas (por Python 2 ou Python 3 para obter mais.

Colocar um \ no final de sua linha ou coloque a instrução no parens ( .. ).A partir de IBM:

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

ou

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

Você pode quebrar linhas entre parenthesises e chaves.Além disso, você pode acrescentar o caractere de barra invertida \ para uma linha explicitamente quebrá-lo:

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

Da boca do cavalo: Explícita linha adesão

Duas ou mais linhas físicas podem ser ingressou na lógica linhas usando caracteres de barra invertida (\), como segue:quando uma linha física termina em um barra invertida que não é parte de uma cadeia de caracteres literal ou comentário, ele é associado com a seguir, formando um único lógica linha, excluindo a barra invertida e o a seguir fim-de-linha de caracteres.Para exemplo:

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

Uma linha que termina com uma barra invertida não é possível realizar um comentário.Uma barra invertida não continuar um comentário.Uma barra invertida faz não continuar um token, exceto para a cadeia de literais (por exemplo, fichas outros que literais de seqüência de caracteres não podem ser divididos entre linhas físicas usando uma barra invertida).Um barra invertida é ilegal em outro lugar em uma linha de fora de uma seqüência de caracteres literal.

Pode não ser o pythonic maneira, mas eu geralmente uso lista com função de associação para a escrita de uma longa seqüência de caracteres, como consultas SQL.

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

Retirado Do Guia do Mochileiro Python (Continuação De Linha):

Quando uma linha lógica de código é mais do que o limite aceito, é necessário dividi-la através de várias linhas físicas.O interpretador de Python vai se juntar linhas consecutivas se o último caractere da linha é uma barra invertida.Isso é útil em alguns casos, mas geralmente deve ser evitado por causa de sua fragilidade:um espaço em branco adicionado ao final da linha, após a barra invertida, vai quebrar o código e pode ter resultados inesperados.

Uma solução melhor é usar parênteses em torno de seus elementos. Esquerda com um unclosed parêntesis no fim-de-linha, o interpretador de Python vai se juntar a próxima linha, até os parênteses são fechados.O mesmo comportamento tem para cabelos cacheados e colchetes.

No entanto, mais frequentemente do que não, tendo que dividir uma longa linha lógica é um sinal de que você está tentando fazer muitas coisas ao mesmo tempo, o que pode prejudicar a legibilidade.

Tendo isso dito, aqui está um exemplo sobre várias importações (quando superior a linha de limites, definidos no PEP-8):

from app import (
    app, abort, make_response, redirect, render_template, request, session
)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top