"¿Cuáles son las ventajas de utilizar la palabra clave def para generadores y funciones?"
Si bien son mecánicamente diferentes, en la práctica, cuando los uso, a menudo son efectivamente los mismos para mí conceptualmente (no pienso mucho en llamar range()vs xrange()).
Sin embargo, en términos de comprender de qué se trata la función rápidamente, estoy de acuerdo en que algo se pierde con el uso de def, pero las cosas no deberían ofuscarse demasiado dentro de la función para empezar.
Incluso un implícito return Nonepuede confundir el comportamiento previsto de una función después de un largo período de condicionales (como en, fue un return Nonecomportamiento final o un descuido en la lógica). Pero esas son solo mis creencias al respecto.
Sin embargo, no creo que mi argumento sea particularmente convincente, por lo que me limitaré a remitirme a PEP 255 :
Problema: introduzca otra nueva palabra clave (por ejemplo, "gen" o "generador") en lugar de "def", o modifique la sintaxis para distinguir las funciones generadoras de las funciones no generadoras.
Con: En la práctica (cómo piensa sobre ellos), los generadores son
funciones, pero con el giro de que son reanudables. La mecánica de cómo se configuran es un problema técnico comparativamente menor, y la introducción de una nueva palabra clave enfatizaría demasiado la mecánica de cómo se inician los generadores (una parte vital pero pequeña de la vida de un generador).
Pro: en realidad (cómo piensas sobre ellos), las funciones generadoras son en realidad funciones de fábrica que producen iteradores generadores como por arte de magia. A este respecto, son radicalmente diferentes de las funciones que no son del generador, actuando más como un constructor que como una función, por lo que reutilizar "def" es, en el mejor de los casos, confuso. Una declaración de "rendimiento" enterrada en el cuerpo no es suficiente para advertir que la semántica es tan diferente.
BDFL: "def" se queda. Ningún argumento en ambos lados es totalmente convincente, por lo que he consultado la intuición de mi diseñador de idiomas. Me dice que la sintaxis propuesta en la PEP es exactamente la correcta: ni demasiado caliente ni demasiado fría. Pero, como el Oráculo de Delphi en la mitología griega, no me dice por qué, así que no tengo una refutación de los argumentos en contra de la sintaxis de PEP. Lo mejor que se me ocurre (aparte de estar de acuerdo con las refutaciones ... ya hechas) es "FUD". Si esto hubiera sido parte del lenguaje desde el primer día, dudo mucho que hubiera aparecido en la página "Verrugas de pitón" de Andrew Kuchling.