Como o PEP8 sugere manter abaixo da regra das 80 colunas para o seu programa python, como posso respeitar isso com cadeias longas?
s = "this is my really, really, really, really, really, really, really long string that I'd like to shorten."
Como eu expandiria isso para a seguinte linha, ou seja,
s = "this is my really, really, really, really, really, really" +
"really long string that I'd like to shorten."
Além disso, como as constantes de string vizinhas são concatenadas automaticamente, você também pode codificar da seguinte forma:
Observe o sinal de mais e eu adicionei a vírgula e o espaço extras que seguem a formatação do seu exemplo.
Pessoalmente, não gosto das barras invertidas, e lembro de ter lido em algum lugar que seu uso é realmente preterido em favor dessa forma, que é mais explícita. Lembre-se de que "Explícito é melhor que implícito".
Considero a barra invertida menos clara e menos útil, porque isso está realmente escapando ao caractere de nova linha. Não é possível colocar um comentário final de linha depois, se for necessário. É possível fazer isso com constantes de string concatenadas:
Eu usei uma pesquisa no Google de "comprimento da linha python", que retorna o link PEP8 como o primeiro resultado, mas também links para outra boa publicação StackOverflow sobre este tópico: " Por que o Python PEP-8 deve especificar um comprimento máximo de linha de 79 caracteres? "
Outra boa frase de pesquisa seria "continuação de linha python".
fonte
"str1" + "str2"
vez de"str1" "str2"
('this is my really, really, really, really, really long {} ' 'that I'd really, really, really, like to {}').format(var1, var2))
Eu acho que a palavra mais importante na sua pergunta foi "sugere".
Os padrões de codificação são coisas engraçadas. Freqüentemente, as orientações fornecidas fornecem uma base muito boa quando foram escritas (por exemplo, a maioria dos terminais é incapaz de exibir> 80 caracteres em uma linha), mas com o tempo elas se tornam funcionalmente obsoletas, mas ainda são rigidamente respeitadas. Eu acho que o que você precisa fazer aqui é avaliar os méritos relativos de "quebrar" essa sugestão específica contra a legibilidade e a capacidade de manutenção do seu código.
Desculpe, isso não responde diretamente à sua pergunta.
fonte
Você perdeu um espaço e provavelmente precisa de um caractere de continuação de linha, ou seja. a
\
.ou até:
Parens também funcionaria em vez da continuação da linha, mas você corre o risco de alguém pensar que pretendia ter uma tupla e que acabara de esquecer uma vírgula. Tomemos, por exemplo:
versus:
Com a digitação dinâmica do Python, o código pode ser executado de qualquer maneira, mas produz resultados incorretos com o que você não pretendia.
fonte
Barra invertida:
ou embrulhe em parênteses:
fonte
Essas são todas ótimas respostas, mas eu não consegui encontrar um plug-in de editor que me ajudasse a editar seqüências "concatenadas implicitamente". Por isso, escrevi um pacote para facilitar as coisas para mim.
No pip (instale parágrafos) se quem estiver vagando por esse tópico antigo quiser conferir. Formata seqüências de várias linhas da mesma maneira que o html (compacta espaço em branco, duas novas linhas para um novo parágrafo, não se preocupa com espaços entre linhas).
torna-se ...
Tudo se alinha facilmente com o (Vim) 'gq'
fonte
Com um,
\
você pode expandir as instruções para várias linhas:Deveria trabalhar.
fonte
Costumo usar alguns métodos não mencionados aqui para especificar grandes seqüências de caracteres, mas são para cenários muito específicos. YMMV ...
Blobs de várias linhas de texto, geralmente com tokens formatados (não exatamente o que você estava perguntando, mas ainda assim útil):
Aumente a variável peça por peça através do método de interpolação de string que você preferir:
Leia-o de um arquivo. O PEP-8 não limita o comprimento das strings em um arquivo; apenas as linhas do seu código. :)
Use força bruta ou seu editor para dividir a string em linhas managaeble usando novas linhas e remova todas as novas linhas. (Semelhante à primeira técnica que listei):
fonte
Opções disponíveis:
"foo" \ "bar"
"foo" + \ "bar"
("foo" "bar")
("foo" + "bar")
Evitar
Evite colchetes com vírgula:
("foo", "bar")
que define uma tupla.fonte
Se você precisar inserir uma literal de cadeia longa e desejar que o flake8 seja desligado, use-o para fechar as diretivas . Por exemplo, em uma rotina de testes, eu defini algumas entradas CSV falsas. Eu descobri que dividi-lo em mais linhas que tinha linhas seria muito confuso, então decidi adicionar um da
# noqa: E501
seguinte maneira:fonte
Eu usei textwrap.dedent no passado. É um pouco complicado, então eu prefiro continuações de linha agora, mas se você realmente quer o recuo do bloco, acho que isso é ótimo.
Código de exemplo (em que o trim é livrar-se do primeiro '\ n' com uma fatia):
Explicação:
dedent calcula o recuo com base no espaço em branco na primeira linha do texto antes de uma nova linha. Se você quiser ajustá-lo, poderá reimplementá-lo facilmente usando o
re
módulo.Esse método tem limitações, pois linhas muito longas ainda podem ser mais longas do que você deseja; nesse caso, outros métodos que concatenam seqüências de caracteres são mais adequados.
fonte
x[1:]
você pode colocar uma barra invertida depoisx = """
para evitar a primeira nova linha.