Como posso fazer uma quebra de linha (linha de continuação) em Python?
-
09-06-2019 - |
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'
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
)