Adicionando Sugar à Sintaxe do Python

Expandindo a sintaxe do Python por meio dos principais wrappers

Eugen Hotaj Segue 17 de jul · 6 min ler (Foto de Tyler B no Unsplash )

Eu amo o Python. É uma linguagem extremamente poderosa que é muito simples de escrever e entender. Ele também tem um extenso ecossistema de bibliotecas que permitem fazer praticamente qualquer coisa que você possa imaginar ( até mesmo voar ).

Recentemente, tornou-se a lingua franca da ciência de dados e aprendizado de máquina. Eu uso isso constantemente no meu trabalho diário, então eu diria que sou bastante proficiente nisso. Eu tenho a legibilidade do Python no Google, afinal.

(De todas as coisas para se gabar, ter a legibilidade do Python no Google é provavelmente a mais estúpida. No caso de não ser óbvio, estou apenas brincando.)

No entanto, o Python não é perfeito. Eu comecei recentemente aprendendo Lisp no meu tempo livre. Se os deuses forjaram o universo em Lisp , quero descobrir de que se trata todo o alarido. Se você é curioso, o Practical Common Lisp é um ótimo livro grátis.

Enquanto aprendia, me deparei com o que eu acho que é um recurso muito legal (mas secundário) do Lisp. Ao definir funções, o Lisp permite usar argumentos anteriores como valores padrão.

Por exemplo, suponha que você esteja escrevendo uma função make_rectangle . Ele recebe como entrada as coordenadas x, y do canto superior esquerdo, width e height , e retorna as coordenadas x, y dos quatro cantos do retângulo. Podemos fazer isso facilmente em Python:

Função para fazer um retângulo em Python.

Agora, suponha que queremos que a função retorne os quadrados apenas se tiver passado o argumento width . Se você nunca programou antes, você pode esperar que uma coisa razoável seja definir height=width , assim:

Uma sintaxe razoável, mas inválida, para permitir que o `make_rectangle` manipule quadrados.

Infelizmente, não é válido o Python. Se você tentar executá-lo, receberá um erro:

 NameError: o nome 'width' não está definido. 

Pessoalmente, sinto que isso é uma falha da linguagem. Claro, é muito fácil trabalhar com a sintaxe e obter um comportamento semelhante:

A maneira pitonica de permitir que o `make_rectangle` manipule quadrados.

Mas isso me irrita! A linguagem deve fazer o que eu quero, e não o contrário. Em vez de me dobrar à vontade do Python, criei um wrapper __main__ que me permite escrever o código que quero.

Como sempre, o código de trabalho completo está disponível no meu GitHub .