"Quais são os méritos de usar a palavra-chave def para geradores e funções?"
Embora eles sejam mecanicamente diferentes, na prática, quando eu os uso, eles geralmente são efetivamente os mesmos para mim conceitualmente (não penso muito em chamar range()
vs xrange()
).
No entanto, em termos de compreensão rápida do que é a função, concordo que algo se perca com o uso de def
, mas as coisas não devem ser muito ofuscadas dentro da função para começar.
Mesmo um implícito return None
pode confundir o comportamento pretendido de uma função depois de um longo período de condicionais (como em, era return None
pretendido como um comportamento final ou uma supervisão na lógica). Mas essas são apenas minhas crenças sobre isso.
Eu não acho que meu argumento seja particularmente convincente, portanto, irei adiar para o PEP 255 :
Problema: introduza outra nova palavra-chave (por exemplo, "gen" ou "gerador") no lugar de "def" ou altere a sintaxe para distinguir as funções de gerador das funções de não gerador.
Contras: Na prática (como você pensa sobre eles), geradores são
funções, mas com a reviravolta de que podem ser retomados. A mecânica de como eles são configurados é uma questão técnica comparativamente menor, e a introdução de uma nova palavra-chave enfatizaria demais a mecânica de como os geradores são iniciados (uma parte vital, mas minúscula, da vida de um gerador).
Pro: Na realidade (como você pensa sobre eles), funções geradoras são na verdade funções de fábrica que produzem iteradores geradores como se por mágica. Nesse aspecto, eles são radicalmente diferentes das funções que não são geradoras, agindo mais como construtor do que como função, portanto, reutilizar "def" é, na melhor das hipóteses, confuso. Uma declaração de "rendimento" enterrada no corpo não é suficiente para avisar que a semântica é tão diferente.
BDFL: "def" permanece. Como nenhum argumento de ambos os lados é totalmente convincente, consultei a intuição do meu designer de linguagem. Diz-me que a sintaxe proposta no PEP é exatamente correta - nem muito quente nem muito fria. Mas, como o Oracle em Delphi na mitologia grega, ele não me diz o porquê, então eu não sou contra os argumentos contra a sintaxe do PEP. O melhor que posso encontrar (além de concordar com as refutações ... já feitas) é "FUD". Se isso fizesse parte da linguagem desde o primeiro dia, duvido muito que tivesse sido a página "Python Warts" de Andrew Kuchling.