Esta é realmente apenas uma pergunta teórica de um novato em python que quer entender mais.
Eu continuo esquecendo os dois pontos após as instruções iniciais do bloco em python. É isso que eu quero dizer:
for <variable> in <sequence>:
if <blah blah>:
Meu pensamento é que uma das razões pelas quais continuo esquecendo é que elas são de fato implícitas: dois pontos ou não, a afirmação termina com essa linha.
Minha pergunta - que pergunto para saber como funciona a sintaxe python - é se os dois pontos são realmente desnecessários? Se eu mudasse a sintaxe do python para que o cólon não fosse mais necessário, algo quebraria? Isso tornaria algumas afirmações ambíguas ou impossíveis?
if
,else
,while
e assim por diante. Se você fez isso, o python ainda seria uma linguagem que pode ser usada sem ambiguidade?if .. then .. end
em uma única linha. Portanto, aqui em pythonthen
é substituído por duas coisas a:
e uma nova linha necessária. Um deles parece redundante.Respostas:
Sim, o cólon é necessário para desambiguar certas construções. Considere, por exemplo
if x - y < z: pass
,. Sem os dois pontos, não podemos decidir como analisar isso sem conhecer o contexto do que x, ye z.if x: -y < z...
é válido se x for booleano;if x - y < z:
caso contrário , é válido.Como é uma idéia muito boa para um idioma de programação não exigir que você execute um aplicativo até o ponto em que está compilando para poder analisá-lo, os dois pontos são muito necessários. Você pode descartá-lo, mas precisará de outras maneiras de desambiguar.
fonte
if condition: print("Condition passed")\n
permitido? O\n
simboliza nova linha após a declaração de impressão.O cólon não é realmente necessário gramaticalmente, se o Python tivesse sido projetado em um mundo diferente, é bastante concebível que o designer da linguagem não decida exigir o cólon. E de fato idiomas como o Cobra fazem isso.
A principal razão pela qual o cólon é necessário em python é a legibilidade humana. Para citar as Perguntas frequentes do Python :
Como também mencionado nas Perguntas frequentes, os dois pontos também facilitam o processamento do código python sem analisar completamente o idioma. Qualquer processador de texto que possua um analisador completo, incluindo o compilador python, pode ficar sem dois pontos se não for necessário ou se for opcional quando não ambíguo.
fonte
Não é necessário para o computador, mas para humanos.
Guido van Rossum (criador do Python) teve um blog de história do Python por um tempo. O cólon foi introduzido no ABC , a fonte de muitos dos recursos do Python.
Em este post sobre "Karin Dewar, recuo e do cólon" , Guido escreve:
( B aqui está uma série de linguagens de protótipo B0, B1, ... que levaram ao ABC. Não é a linguagem B que é a antecessora de C).
Também me lembro de Guido apontando nos anos 90 que era para o benefício de editores , que podem inserir automaticamente um recuo após uma linha que termina com dois pontos. Mas ainda não encontrei uma fonte para isso.
fonte
A sintaxe da linguagem de programação Cobra é fortemente inspirada na linguagem Python e acaba com os dois pontos, portanto parece que não é estritamente necessário. No entanto, não basta remover o cólon, existem outras alterações na sintaxe necessária. Veja, por exemplo, este código de um dos meus projetos de brinquedos :
Sem os dois pontos para separar o corpo da lista de parâmetros, eu precisaria usar o recuo:
Acredito que as versões anteriores do Cobra tornavam o cólon opcional, você poderia usar o recuo, o cólon ou ambos. Semelhante à maneira como funciona no Ruby, onde existem palavras-chave para separar as diferentes partes das expressões de controle, mas você também pode usar separadores de expressão (ponto-e-vírgula ou nova linha):
Nas versões atuais do Cobra, você pode usar uma vírgula:
pode ser escrito como
Você precisa de alguma maneira de separar as diferentes partes das expressões ou definições de controle. Em Python, esse é o cólon. Se você remover o cólon, precisará substituí-lo por outra coisa, por exemplo, recuo forçado . Apenas remover o cólon não funcionará.
A única maneira de ter certeza absoluta é formalizar a sintaxe com e sem dois pontos e provar sua não ambiguidade.
Observe, no entanto, que um dos aforismos do Zen do Python é "Explícito é melhor que implícito"; portanto, o delineamento explícito de blocos com dois pontos parece se encaixar na filosofia geral do Python. As Perguntas frequentes sobre design e história também mencionam que esta decisão se baseia em evidências empíricas do antecessor do Python, ABC.
fonte