Por que o Python pep-8 recomenda fortemente espaços sobre tabulações para indentação?

147

Vejo no Stack Overflow e no PEP 8 que a recomendação é usar espaços apenas para indentação em programas Python. Consigo entender a necessidade de um recuo consistente e senti essa dor.

Existe uma razão subjacente para os espaços serem preferidos? Eu teria pensado que as abas eram muito mais fáceis de trabalhar.

quamrana
fonte
7
Leia a discussão sobre PEP para saber.
e-satis
106
1 nível de indentação é ... 1. É completamente ilógico ter que concordar em usar N espaços quando todos poderiam usar uma única guia. Que, a propósito, é exatamente para isso. Recuar. Uma vez. 1 nível de indentação = 1 caractere único, ou seja, 1 guia única. E são mais úteis porque cada codificador pode escolher livremente como visualizá-lo. Usar espaços é estúpido, nunca vi um único argumento que não seja estúpido.
o0 '.
31
@BlueBomber e por que você não força as pessoas a ter um tamanho de fonte e um esquema de cores que você gosta, enquanto está nisso? Ainda estúpido.
o0 '.
10
@BlueBomber não, não, é EXATAMENTE no mesmo nível de absurdo.
o0 '.
9
@BlueBomber Qual é exatamente a diferença? Você está reduzindo um grau de liberdade na configuração do ambiente de outro desenvolvedor, sem alcançar nenhum benefício perceptível. Se você quer ser um ditador e forçar todos a olhar para o código com um recuo correspondente a 2, 4 ou 29 espaços, você ainda pode fazer isso com guias. Peça aos subordinados para definirem o IDE deles para exibir guias como correspondendo ao número de espaços preferido. Se você não tem autoridade para fazer isso, talvez permita que eles decidam por si mesmos quão ampla uma unidade de indentação é confortável aos olhos deles.
Asad Saeeduddin 23/09/14

Respostas:

111

A resposta foi dada ali mesmo no PEP [ed: esta passagem foi editada em 2013 ]. Eu cito:

A maneira mais popular de recuar o Python é apenas com espaços.

Que outra razão subjacente você precisa?

Para ser menos franco: considere também o escopo do PEP, conforme declarado no primeiro parágrafo:

Este documento fornece convenções de codificação para o código Python que compreende a biblioteca padrão na distribuição principal do Python.

A intenção é tornar todo o código que está presente na distribuição oficial do python formatado de forma consistente (espero que possamos concordar que isso é universalmente uma Good Thing ™).

Como a decisão entre espaços e guias para um programador individual é a) realmente uma questão de gosto eb) facilmente tratada por meios técnicos (editores, scripts de conversão etc.), existe uma maneira clara de encerrar toda a discussão: escolha uma .

Guido foi quem escolheu. Ele nem precisou dar uma razão, mas ainda o fez referindo-se a dados empíricos.

Para todos os outros propósitos, você pode tomar este PEP como uma recomendação ou pode ignorá-lo - sua escolha, a de sua equipe ou os líderes de sua equipe.

Mas se eu puder lhe dar um conselho: não misture ;-) [ed: Misturar guias e espaços não é mais uma opção.]


fonte
11
Acordado. A consistência é mais importante que tabulações vs. espaços X vs. espaços Y.
Mike Clark
10
me faz pensar ... por que a biblioteca padrão tem tantos nomes de métodos mixedCase?
Kyle Wild
6
@orkitude: a) ninguém é perfeito. b) razões históricas.
8
Então, por que tantos programadores optaram por usar espaços antes do PEP-8? É isso que eu realmente quero saber. As vantagens das guias parecem óbvias para mim, mas não os espaços.
precisa saber é o seguinte
95

Bem, parece que todo mundo está fortemente inclinado para os espaços. Eu uso guias exclusivamente. Eu sei muito bem o porquê.

As guias são na verdade uma invenção interessante, que veio após os espaços. Ele permite que você recue sem pressionar o espaço milhões de vezes ou usando uma guia falsa (que produz espaços).

Eu realmente não entendo por que todo mundo está discriminando o uso de guias. É como os idosos discriminando os mais jovens por escolher uma tecnologia mais nova e eficiente e reclamando que a discagem por pulso funciona em todos os telefones , não apenas nesses novos sofisticados. "A discagem por tom não funciona em todos os telefones, é por isso que está errado".

Seu editor não consegue lidar com as guias corretamente? Bem, pegue um editor moderno . Pode ser que seja o momento, estamos agora no século 21 e o tempo em que um editor era um software complicado de alta tecnologia já passou muito tempo. Agora temos muitos editores para escolher, todos eles compatíveis com guias. Além disso, você pode definir quanto deve ser uma guia, algo que não pode ser feito com espaços. Não consegue ver guias? O que é isso para uma discussão? Bem, você também não pode ver espaços!

Posso ter a ousadia de sugerir um editor melhor? Um desses de alta tecnologia, que foram lançados há cerca de 10 anos, exibem caracteres invisíveis ? (sarcasmo desligado)

Usar espaços causa muito mais trabalho de exclusão e formatação. É por isso que (e todas as outras pessoas que sabem disso e concordam comigo) usam guias para Python.

Misturar separadores e espaços é um argumento de não-não e não há sobre isso. Isso é uma bagunça e nunca pode funcionar.

nigratruo
fonte
26
Para adicionar isso, dê uma olhada no teclado, o símbolo da tecla TAB retrata claramente o recuo - esse é o objetivo recuado da tecla, não o SPACE. PEP8 recomenda aos espaços de uso é um IMHO erro, mas é apenas uma recomendação - en.wikipedia.org/wiki/Tab_character#Tab_characters
Daniel Sokolowski
29
Concordo inteiramente com este post. Usar espaços é para tolos que gostam de ser enganados por esses erros de recuo de 1 espaço. Se o seu recuo foi desativado em 1 guia, garanto que você notaria.
Sepero
12
@Zingham Ninguém pode usar guias exclusivamente: guias e espaços sempre são usados ​​em combinação e isso leva à inconsistência. Eu e milhares de outros os estamos usando de maneira bastante consistente todos os dias. Guias para recuo, espaços para alinhamento. Exatamente qual parte desse conceito você acha terrivelmente difícil de entender e por que está convencido de que é impossível aplicá-lo de forma consistente?
antred 22/01
1
O problema real com as guias é que você não pode obter indentação exata para o caractere recomendado pelo mesmo PEP8 no comentário "# Alinhado ao delimitador de abertura". Essa é a única razão para preferir espaços: para obter o recuo correto!
user541905
1
A pergunta é "Por que o Python pep-8 recomenda fortemente espaços sobre tabulações para indentação?" . Esta resposta nunca menciona nada sobre o PEP8. ||| Em vez de tentar responder à pergunta ... essa resposta me parece um enorme artigo de opinião condescendente . Existem 276 palavras usadas para dizer "guias são melhores que espaços e aqui está o porquê ...".
Trevor Boyd Smith
42

Pessoalmente, não concordo com os espaços sobre as guias. Para mim, as guias são um caractere / mecanismo de layout do documento, enquanto os espaços são para conteúdo ou delineamento entre comandos no caso de código.

Eu tenho que concordar com os comentários de Jim que as abas não são realmente o problema, são as pessoas e como elas querem misturar abas e espaços.

Dito isto, eu me forcei a usar espaços para o bem da convenção. Valorizo ​​a consistência sobre a preferência pessoal.

Soviut
fonte
3
Tentei me forçar a usar espaços também, mas as guias inteligentes do editor (pelo menos Eclipse + PyDev) vencem, especialmente se você ativar a exibição de caracteres invisíveis. E eu posso facilmente definir guias para serem 4, 8, 6 espaços visualmente. Portanto, no meu código, pelo menos, valorizo ​​a preferência pessoal e uso espaços, se essa for a convenção estabelecida na base de código existente.
Daniel Sokolowski
2
Tudo bem, desde que você não esteja codificando em uma equipe. Quando você está em uma equipe, você concorda com uma única convenção e a mantém.
Soviut
1
@Soviut Isso parece principalmente um desejo para mim. Em todas as equipes em que participei, a linha oficial do partido era "espaços de uso". A realidade era que praticamente todo arquivo era uma bagunça total de guias e espaços, e mesmo em arquivos que consistentemente usavam apenas espaços ou apenas guias, o recuo ainda estava por todo o lado.
antred
Sim, mas foi isso que eu quis dizer. Algum consenso é finalmente alcançado e imposto. Como você disse, geralmente é "apenas use espaços".
Soviut
esta é a principal razão pela qual prefiro guias. Ela só faz sentido ter caracteres separados para layout e palavra delimitação
woojoo666
31

O motivo dos espaços é que as guias são opcionais. Os espaços são o denominador comum mais baixo real na pontuação.

Todo editor de texto decente tem um "substituir abas por espaços" e muitas pessoas usam isso. Mas não sempre.

Embora alguns editores de texto possam substituir uma série de espaços por uma guia, isso é realmente raro.

Bottom Line . Você não pode dar errado com espaços. Você pode dar errado com as guias. Portanto, não use guias e reduza o risco de erros.

S.Lott
fonte
15
Eu nunca juraria fazer algo da maneira errada só porque muitas outras pessoas (pessoas, editores de texto etc.) também acontecem da maneira errada. Em 2015, um editor de texto que não lida bem com guias pertence à lata de lixo.
antred 8/11
2
"Você não pode dar errado com espaços. Você pode dar errado com guias". Eu descobri que isso é 100% incorreto. Na minha experiência: "Você não pode dar errado com Guias. Você pode dar errado com espaços" ... especialmente ao compartilhar código.
amigos estão dizendo sobre cmroanirgo
5
Então alguém finalmente disse: use espaços porque é o menor denominador comum. A mesma regra nos levou a manter MBR, BIOS e formulários em papel em escritórios do governo. Só que eles realmente têm problemas conceituais, enquanto tabulações versus espaços é um problema 100% estúpido do usuário.
precisa
1
Isso me parece um argumento argumentum ad populum: argumento falacioso que conclui que uma proposição é verdadeira porque muitas ou a maioria das pessoas acredita nela. Como todo editor pode substituir abas por espaços, os espaços são a escolha certa, é uma falácia !!
Djunzu
27

O problema das guias é que elas são invisíveis e as pessoas nunca podem concordar com a largura das guias. Quando você mistura abas e espaços e define tabstops em algo diferente de Python (que usa tabstops a cada 8 espaços), verá o código em um layout diferente do que o Python vê. E como o layout determina os blocos, você verá uma lógica diferente. Isso leva a erros sutis.

Se você insiste em desafiar o PEP 8 e usar abas - ou pior, misturar abas e espaços - pelo menos sempre execute python com o argumento '-tt', que gera recuo inconsistente (às vezes uma aba, às vezes um espaço para o mesmo recuo) nível) um erro. Além disso, se possível, configure seu editor para exibir guias de maneira diferente. Mas, na verdade, a melhor abordagem é não usar guias, ponto final.

Thomas Wouters
fonte
43
É verdade que as guias são invisíveis e as pessoas não podem concordar com a largura das guias. Mas o mesmo também se aplica aos espaços. Quando você mistura abas e espaços, as coisas dão errado. Mas por que você está culpando essa situação por abas e não espaços?
Jim Jim
47
Não, o mesmo não se aplica aos espaços. As pessoas podem concordar com a largura dos espaços.
Rafał Dowgird 23/09/08
32
Um único espaço pode sempre ter a mesma largura, mas o recuo com espaços nem sempre é da mesma largura. Não vejo como concordar em usar tabulações com n espaços de largura é diferente de concordar em recuar com n espaços.
Jim Jim
26
Sim, eu sei que os problemas na mistura dos dois podem causar. O que não entendo é por que algumas pessoas culpam isso por abas. O problema é misturá-los, não as guias em particular. Você poderia resolver o problema substituindo abas por espaços, mas também poderia resolver o problema substituindo espaços por abas.
Jim
70
E não, se eu usar guias de 8 largos e você usar guias de 6 largos e compartilharmos código, ele não ficará bagunçado. É tudo apenas uma guia para o intérprete Python.
Jim Jim
22

Os principais problemas com o recuo ocorrem quando você mistura abas e espaços. Obviamente, isso não indica qual você deve escolher, mas é uma boa razão para recomendar uma, mesmo que você a escolha jogando uma moeda.

No entanto, IMHO existem algumas razões menores para favorecer espaços em vez de guias:

  • Ferramentas diferentes. Às vezes, o código é exibido fora do editor de um programador. Por exemplo. postado em um grupo de notícias ou fórum. Os espaços geralmente se saem melhor do que as guias aqui - em todos os lugares os espaços ficam mutilados, as guias também, mas não vice-versa.

  • Os programadores veem a fonte de maneira diferente. Isso é profundamente subjetivo - é o principal benefício das guias ou um motivo para evitá-las, dependendo do lado em que você estiver. No lado positivo, os desenvolvedores podem visualizar a fonte com o recuo preferido, para que um desenvolvedor que prefere o recuo de 2 espaços possa trabalhar com um desenvolvedor de 8 espaços na mesma fonte e ainda assim ver o que quiser. A desvantagem é que há repercussões nisso - algumas pessoas gostam do 8-space porque dá um feedback muito visível de que estão profundamente aninhadas - elas podem ver o código verificado pelo 2-indentador constantemente envolto em seu editor. Fazer com que todos os desenvolvedores vejam o código da mesma maneira leva a mais consistência nos comprimentos das linhas e outros problemas também.

  • Recuo de linha continuada. Às vezes, você deseja recuar uma linha para indicar que ela é carregada da anterior. por exemplo.

    def foo():
        x = some_function_with_lots_of_args(foo, bar, baz,
                                            xyzzy, blah)

    Se você estiver usando guias, não há como alinhar isso para pessoas que usam diferentes paradas de tabulação em seu editor sem misturar espaços e guias. Isso efetivamente mata o benefício acima.

Obviamente, porém, essa é uma questão profundamente religiosa, com a qual a programação é atormentada. A questão mais importante é que devemos escolher uma - mesmo que não seja a que você favorece. Às vezes, acho que a maior vantagem de um avanço significativo é que pelo menos somos poupados das guerras de colocação de braçadeiras.

Também vale a pena ler este artigo de Jamie Zawinski sobre o assunto.

Brian
fonte
3
O alinhamento é trivial. Simplesmente uso os colchetes como um bloco e recuo cada argumento. Além disso, no seu exemplo, você pode muito bem usar espaços, pois está dentro de uma lista de argumentos e pode empilhar quantos espaços quiser.
Soviut 16/05/2009
3
@Soviut: Se você recuar com espaços, o alinhamento será interrompido assim que for visualizado com um tamanho de guia diferente. A única maneira de preservá-lo é usar guias para o nível de recuo e, em seguida, espaços para o resto - ou seja, misturar espaços e guias, o que leva a seus próprios problemas.
187 Brian Brian
Sim, é por isso que costumo usar a convenção python de recuo de bloco nos meus argumentos de qualquer maneira. Claro, eles podem não estar alinhados com a chave aberta, mas ainda está claro a qual linha ou comando eles pertencem. A sintaxe do JQuery opera com um princípio semelhante.
Soviut 17/05/2009
2
@ Brian: Não vejo como isso leva a problemas. É exatamente o caminho certo, guias para recuo, espaços para alinhamento. Não é a mesma coisa que misturar espaços e tabulações para indentação .
antred 04/02
1
@CoreDumpError Uh não, certamente não. Eu sei disso porque o Python 3 nunca reclama de nenhum dos meus scripts e uso guias para identações / espaços para alinhar todo o tempo danado. Além disso, o PEP8 não pode "proibir" nada, uma vez que é apenas uma recomendação (e uma ação tímida, na minha opinião).
antred
12

Observe que o uso de guias confunde outro aspecto do PEP 8:

Limite todas as linhas a um máximo de 79 caracteres.

Suponhamos, hipoteticamente, que você use uma largura de tabulação 2 e eu use uma largura de 8. Você escreve todo o seu código para que suas linhas mais longas atinjam 79 caracteres, e então começo a trabalhar no seu arquivo. Agora eu tenho um código difícil de ler porque (como afirma o PEP):

O agrupamento padrão na maioria das ferramentas interrompe a estrutura visual do código

Se todos nós usamos 4 espaços, é sempre o mesmo. Qualquer pessoa cujo editor possa suportar uma largura de 80 caracteres pode ler confortavelmente o código.Nota: O limite de 80 caracteres é uma guerra santa por si só, então não vamos começar por aqui.

Qualquer editor que não seja péssimo deve ter a opção de usar espaços como se fossem guias (inserindo e excluindo), para que realmente não deva ser um argumento válido.

Thane Brimhall
fonte
7

A resposta para a pergunta é: O PEP-8 quer fazer uma recomendação e decidiu que, como os espaços são mais populares, ele recomenda fortemente espaços sobre tabulações.


Notas sobre PEP-8

O PEP-8 diz 'Use 4 espaços por nível de indentação'.
É claro que esta é a recomendação padrão.

'Para códigos realmente antigos que você não quer estragar, você pode continuar usando as guias de 8 espaços.'
É claro que existem ALGUMAS circunstâncias em que as guias podem ser usadas.

'Nunca misture abas e espaços.'
Esta é uma proibição clara de mixagem - acho que todos concordamos com isso. O Python pode detectar isso e geralmente engasga. O uso do argumento -tt torna esse erro explícito.

'A maneira mais popular de recuar o Python é apenas com espaços. A segunda maneira mais popular é apenas com guias.
Isto afirma claramente que ambos são usados. Para ser mais claro: você nunca deve misturar espaços e guias no mesmo arquivo.

'Para novos projetos, somente espaços são recomendados em guias.'
Essa é uma recomendação clara e forte, mas não uma proibição de guias.


Não consigo encontrar uma boa resposta para minha própria pergunta no PEP-8. Eu uso guias, que usei historicamente em outros idiomas. Python aceita fonte com uso exclusivo de guias. Isso é bom o suficiente para mim.

Eu pensei em trabalhar com espaços. No meu editor, configurei um tipo de arquivo para usar espaços exclusivamente e, portanto, ele insere 4 espaços se eu pressionar tab. Se eu pressionar tab muitas vezes, tenho que excluir os espaços! Arrgh! Quatro vezes mais exclusões que guias! Meu editor não pode dizer que estou usando 4 espaços para recuos (embora o editor AN possa fazer isso) e obviamente insiste em excluir os espaços, um de cada vez.

Não se poderia dizer ao Python que considerasse as guias como n espaços quando seus recuos de leitura? Se pudéssemos concordar com 4 espaços por recuo e 4 espaços por guia e permitir que o Python aceitasse isso, não haveria problemas.
Devemos encontrar soluções em que todos saem ganhando.

quamrana
fonte
1
Qual editor você está usando? A maioria das que usei tem uma opção para deduzir no backspace (o emacs se comporta dessa maneira, por exemplo), independentemente da implementação do recuo.
Brian
Você está certo - não vejo uma opção para deduzir no backspace, mas provavelmente você pode lidar com isso usando a tecla shift-tab ou reduzir o recuo (ctrl-shift-i por padrão).
Brian
Estou apenas tentando o PyScripter, que parece muito melhor usando espaços quando você pressiona tab e removendo-os em 4 quando você pressiona backspace.
quamrana 23/08/09
28
"Eu tenho que excluir os espaços! Arrgh! Quatro vezes mais exclusões que abas!" - Essa é a única razão pela qual eu uso guias para tudo e por que acho que as pessoas que usam espaços são loucas. :) Nunca tive problemas, exceto quando colo algo da Web que usa espaços. Em seguida, uma simples substituição de localização corrige isso.
Aphex 13/01
3

Eu sempre usei guias no meu código. Dito isto, recentemente descobri uma razão para usar espaços: ao desenvolver no meu tablet Internet Nokia N900, agora eu tinha um teclado sem uma tecla tab. Isso me forçou a copiar e colar guias ou reescrever meu código com espaços. Encontrei o mesmo problema com outros telefones. É verdade que esse não é um uso padrão do Python, mas algo a ser lembrado.

Skyler
fonte
2

A JWZ diz o melhor :

Quando [as pessoas estão] lendo código e quando terminam de escrever um novo código, elas se preocupam com quantas colunas de tela pelas quais o código tende a recuar quando um novo escopo (ou sexpr, ou o que for) é aberto ...

... Minha opinião é que a melhor maneira de resolver os problemas técnicos é exigir que o caractere TAB ASCII # 9 nunca apareça nos arquivos do disco: programe seu editor para expandir as TABs para um número apropriado de espaços antes de gravar as linhas no disco. ..

... Isso pressupõe que você nunca use guias em locais onde elas são realmente significativas, como em constantes de cadeia ou de caracteres, mas eu nunca faço isso: quando importa que é uma guia, eu sempre uso '\ t'.

Mark Cidade
fonte
10
Eu faria o contrário: guias têm um significado semântico para recuo, portanto, é mais sensato ter guias armazenadas e espaços exibidos. O usuário pode escolher um estilo de formatação e o editor expandirá as guias adequadamente.
AkiRoss #
1
Você ainda tem o problema de separadores e espaços misturados, além de um autor usando 1 coluna por separador e recuando mais de 4 vezes, o que pareceria louco em um editor de texto configurado para exibir cada caractere de separador com 4 colunas de largura. Guias para indentação fazem mais sentido em um editor de texto de largura variável, como um processador de texto usando fontes espaçadas proporcionalmente. Nem tanto com um editor de texto de largura fixa.
Mark Cidade
2
Não, eu queria dizer que um editor de texto deveria analisar a gramática do idioma e entender quando uma tabulação está ocorrendo, para que as guias pudessem ser usadas apenas como formatação média e não haveria necessidade de usar espaços para recuo. Não é necessário "tab" para ter uma largura fixa, e geralmente acho vergonhoso que, com as técnicas atuais (por exemplo, aprendizado de máquina), a formatação ainda seja um problema para os programadores. Tudo deve ser automatizado e deve ser automatizado e transparente.
AkiRoss
Não vejo como seria capaz de entender isso.
Mark Cidade
1

Como o python depende da indentação para reconhecer a estrutura do programa, é necessária uma maneira clara de identificar a identificação. Esse é o motivo para escolher espaços ou tabulações.

No entanto, o python também tem uma forte filosofia de ter apenas uma maneira de fazer as coisas; portanto, deve haver uma recomendação oficial para uma maneira de fazer o recuo.

Os espaços e as guias representam desafios únicos para um editor manipular como recuo. O tratamento das próprias guias não é uniforme entre os editores ou até mesmo as configurações do usuário. Como os espaços não são configuráveis, eles representam a escolha mais lógica, pois garantem que o resultado terá a mesma aparência em todos os lugares.

Florian Bösch
fonte
8
E como todo editor também pode escolher seu esquema de cores, você acha que eles também devem determinar qual esquema de cores usar?
o0 '.
8
Sim, mas essa inconsistência não faz mais sentido? Porque é simplesmente uma questão de preferência visual. Se eu preferir um recuo "de aparência" maior no meu editor, posso definir minhas guias como 8 espaços, se preferir menos, posso defini-lo como 2. Dessa forma, o código, sem alterar a formatação, melhor se adequa ao indivíduo que está observando.
dennmat
8
Eu concordo com dennmat- Se eu preferir visualmente 2 espaços e Guido preferir visualmente 4 espaços, a escolha lógica é usar o recuo da tabulação.
Sepero
0

A vantagem mais significativa que posso dizer dos espaços sobre as guias é que muitos programadores e projetos usam um número definido de colunas para o código-fonte, e se alguém comete uma alteração com o tabstop definido como 2 espaços e o projeto usa 4 espaços como o ponto de tabulação das linhas longas será muito longo para a janela do editor de outras pessoas. Concordo que as guias são mais fáceis de trabalhar, mas acho que os espaços são mais fáceis de colaboração, o que é importante em um grande projeto de código aberto como o Python.

sirwart
fonte
2
isso está errado: isso acontece apenas se você misturar guias e espaços, e você resolveria igualmente forçando todos a usar guias em vez de espaços.
o0 '.
0

Você pode ter seu bolo e comê-lo. Defina seu editor para expandir as guias em espaços automaticamente.

(Isso seria :set expandtabno Vim.)

Rod Daunoravicius
fonte
0

Meu palpite é que a maioria dos editores de texto linux faz com que os padrões pareçam ridiculamente grandes por padrão. Não consigo pensar em outro bom motivo para usar espaços sobre tabulações.

brian cronrath
fonte
-1

Além de todas as outras razões já nomeadas (consistência, nunca misturando espaços e tabulações etc.), acredito que há mais algumas razões para a convenção de 4 espaços observar. Isso se aplica apenas ao Python (e talvez a outras linguagens em que a indentação tenha significado). As guias podem ser melhores em outros idiomas, dependendo das preferências individuais.

  1. Se um editor não mostrar guias (o que acontece, dependendo da configuração, em poucas), outro autor pode assumir que seu código usa 4 espaços, b / c quase todo o código Python disponível ao público; se esse mesmo editor tiver uma largura de tabulação de 4, podem acontecer coisas desagradáveis ​​- pelo menos, essa pessoa pobre perderá tempo com um problema de indentação que seria muito fácil de evitar, mantendo-se na convenção. Então, para mim, a razão número um é evitar erros com consistência.

  2. Reformulando a questão de qual é o melhor, abas ou espaços, deve-se perguntar quais são as vantagens das abas; Já vi muitas postagens elogiando guias, mas poucos argumentos convincentes para eles; bons editores como emacs, vi (m), kate, ... fazem recuo adequado, dependendo da semântica do seu código - mesmo sem tabulações; os mesmos editores podem ser facilmente configurados para descontrair no backspace etc.

  3. Algumas pessoas têm preferências muito fortes quando se trata de liberdade para decidir a aparência / layout do código; outros valorizam a consistência sobre essa liberdade. O Python reduz drasticamente essa liberdade, ditando que o recuo é usado para blocos, etc. Isso pode ser visto como um bug ou um recurso, mas meio que vem com a escolha do Python. Pessoalmente, gosto dessa consistência - ao começar a codificar em um novo projeto, pelo menos o layout está próximo ao que estou acostumado, por isso é bastante fácil de ler. Quase sempre.

  4. Usar espaços para recuo permite "truques de layout" que podem facilitar a compreensão do código; alguns exemplos destes estão listados no PEP8; por exemplo.

    foo = long_function_name(var_one, var_two,
                             var_three, var_four)
    
    # the same for lists
    a_long_list = [1,
                   2,
                   # ...
                   79]
    
    # or dictionaries
    a_dict = {"a_key": "a_value",
              "another_key": "another_value"}

    Obviamente, o que foi dito acima também pode ser escrito bem

    foo = long_function_name(
        var_one, var_two,
        var_three, var_four)
    
    # the same for lists
    a_long_list = [
        1,
        2,
        # ...
        79]
    
    # or dictionaries
    a_dict = {
        "a_key": "a_value",
        "another_key": "another_value"}

    No entanto, o último exige mais linhas de código e, por vezes, menos linhas são consideradas melhores (porque você obtém mais em uma única tela). Mas se você gosta de alinhamento, os espaços (de preferência assistidos por um bom editor) oferecem, em certo sentido, mais liberdade no Python do que as guias. [Bem, acho que alguns editores permitem que você faça o mesmo com guias;) - mas com espaços, todos eles fazem ...]

  5. Voltando ao mesmo argumento que todo mundo faz - o PEP 8 determina (ok, recomenda fortemente) os espaços. Se estiver vindo para um projeto que usa apenas guias, é claro, você tem poucas opções. Porém, devido ao estabelecimento das convenções do PEP 8, quase todos os programadores de Python estão acostumados a esse estilo. Isso torna muito mais fácil encontrar um consenso sobre um estilo aceito pela maioria dos programadores ... e fazer com que as pessoas concordem com o estilo pode ser muito difícil.

  6. As ferramentas que ajudam a reforçar o estilo geralmente estão cientes do PEP 8 sem esforço extra. Essa não é uma ótima razão, mas é bom ter as coisas funcionando prontas.

Gerald Senarclens de Grancy
fonte
-3

O problema universal das guias é que elas podem ser representadas de maneira diferente em um ambiente diferente.
Em um determinado editor, uma guia pode ter 8 espaços ou 2.
Em alguns editores, você pode controlar isso, enquanto em outros não.

Outro problema com as guias é como elas são representadas na saída impressa. Acredito que a maioria das impressoras interpreta uma guia como 8 espaços.

Com espaços, não há dúvida. Tudo vai alinhar como o autor pretendia.

Benoit
fonte
14
Outro que compreendeu mal a guia ... pegue uma máquina de escrever mecânica e brinque com ela por um tempo, sério! 1 guia não é igual a 8 espaços! é igual a up_to_8_spaces ! ootoh: com fontes proporcionais, as guias são a única maneira de garantir o alinhamento.
3
"Em um determinado editor, uma guia pode ter 8 espaços ou 2". Se eu gosto de 4 espaços e meu amigo gosta de 8 espaços, 2 espaços ou 3 espaços, etc. Então, podemos concordar com as guias porque (sendo caracteres de indentação dedicados ), o editor sabe o que são e pode exibi-los. adequadamente. Eu vejo o código com recuos de 4 espaços, você vê com recuos de 8 espaços, nosso amigo estranho usa seus 3 espaços e tudo é legal. As circunstâncias (especialmente em Python!) Em que a largura da própria guia importaria são tão raras que até mesmo os proponentes do espaço raramente as trazem à tona.
JamesTheAwesomeDude
-4

Sobre a discussão entre Jim e Thomas Wouters nos comentários.

O problema era ... como a largura das guias e os espaços podem variar - e como os programadores não podem concordar com as duas larguras - por que as guias são responsáveis?

Eu concordo com Jim nisso - as abas NÃO são más por si mesmas. Mas há um problema...

Com espaços, posso controlar como "MEU PRÓPRIO CÓDIGO" fica em TODOS os editores do mundo. Se eu usar 4 espaços - não importa em que editor você abrir meu código, ele terá a mesma distância da margem esquerda. Com as guias, estou à mercê da configuração de largura da guia para o editor - mesmo para MEU PRÓPRIO CÓDIGO. E eu não gosto disso.

Portanto, embora seja verdade que mesmo os espaços não podem garantir consistência - eles pelo menos oferecem mais controle sobre a aparência do seu código OWN em qualquer lugar - algo que as guias não podem.

Eu acho que NÃO é a consistência nos programadores que escrevem o código - mas a consistência nos editores que mostram esse código - que os espaços facilitam o alcance (e a imposição).

codificador de árvore
fonte
6
Você está "à mercê da configuração de largura da guia para o editor"? Se o seu editor não permite que você defina a guia de largura que você quer, você pode estar usando notepad.exe
user137369
4
@ zigg Isso é absolutamente irrelevante para o argumento, uma vez que ele (ela?) está falando especificamente sobre seu próprio código (essa informação está em negrito, em itálico e em maiúsculas). Em nenhum lugar da discussão o compartilhamento de código é relevante.
user137369
1
Os editores não são as únicas ferramentas para visualizar o código. Também existem diffs, tracebacks, Github e outras páginas da web, e assim por diante que escolherão alguma largura de guia fora do seu controle (provavelmente 8).
RemcoGerlich 23/11
Eu entendo o seu ponto. Você realmente controla como todos vêem seu código (em relação à indentação). Seu próximo passo é controlar o tipo de fonte e a cor que todos usarão para ver seu código. Depois disso, você estará preparado para dominar o mundo em si e não apenas os editores de código!
Djunzu 31/10