"Quali sono i vantaggi dell'utilizzo della parola chiave def sia per i generatori che per le funzioni?"
Mentre sono meccanicamente diversi, in pratica quando li uso sono spesso ugualmente concettualmente uguali per me (non penso molto a chiamare range()
vs xrange()
).
In termini di comprensione della funzione rapida, però, sono d'accordo che qualcosa si perde con l'uso di def
, ma le cose non dovrebbero essere troppo offuscate all'interno della funzione per cominciare.
Anche un implicito return None
può confondere il comportamento previsto di una funzione dopo un lungo po 'di condizionali (come in, era return None
inteso come un comportamento finale o una svista nella logica). Ma quelli sono solo le mie convinzioni al riguardo.
Non credo che il mio argomento sia particolarmente convincente, quindi rimanderò al PEP 255 :
Problema: introdurre un'altra nuova parola chiave (ad esempio "gen" o "generatore") al posto di "def", o modificare in altro modo la sintassi, per distinguere le funzioni del generatore dalle funzioni non del generatore.
Contro: in pratica (come ci pensi), i generatori sono
funzioni, ma con la svolta che sono riprendibili. La meccanica di come sono configurati è un problema tecnico relativamente minore e l'introduzione di una nuova parola chiave avrebbe inutilmente enfatizzato la meccanica di come i generatori iniziano (una parte vitale ma minuscola della vita di un generatore).
Pro: In realtà (come ci pensi), le funzioni del generatore sono in realtà funzioni di fabbrica che producono generatori-iteratori come per magia. A questo proposito sono radicalmente diversi dalle funzioni non generatrici, comportandosi più come un costruttore che come una funzione, quindi riutilizzare "def" è nella migliore delle ipotesi confuso. Un'affermazione "resa" sepolta nel corpo non è sufficiente per avvertire che la semantica è così diversa.
BDFL: "def" rimane. Nessun argomento su entrambi i lati è del tutto convincente, quindi ho consultato l'intuizione del mio designer linguistico. Mi dice che la sintassi proposta nel PEP è esattamente giusta - non troppo calda, non troppo fredda. Ma, come l'Oracolo di Delfi nella mitologia greca, non mi dice perché, quindi non ho una confutazione per gli argomenti contro la sintassi del PEP. Il meglio che posso inventare (oltre a concordare con le confutazioni ... già fatte) è "FUD". Se questo fosse stato parte del linguaggio fin dal primo giorno, dubito fortemente che avrebbe reso la pagina "Python Warts" di Andrew Kuchling.