"Quali sono i vantaggi dell'uso della parola chiave def per entrambi i generatori e le funzioni?"
Anche se sono meccanicamente diversi, in pratica quando li uso sono spesso effettivamente uguali a me concettualmente (non penso molto a chiamare range()
vs xrange()
).
Per quanto riguarda la comprensione della funzione, però, concordo che qualcosa è andato perso con l'uso di def
, ma le cose non dovrebbero essere troppo offuscate all'interno della funzione per cominciare.
Anche un% implicito% co_de può confondere il comportamento previsto di una funzione dopo un lungo bit di condizionali (come in, era un return None
inteso come un comportamento finale o una svista nella logica). Ma quelli sono solo le mie credenze al riguardo.
Non ritengo che la mia argomentazione sia particolarmente convincente, quindi mi limiterò a PEP 255 :
Issue: Introduce another new keyword (say, "gen" or "generator") in
place of "def", or otherwise alter the syntax, to distinguish
generator-functions from non-generator functions.
Con: In practice (how you think about them), generators are
functions, but with the twist that they're resumable. The mechanics of
how they're set up is a comparatively minor technical issue, and
introducing a new keyword would unhelpfully overemphasize the
mechanics of how generators get started (a vital but tiny part of a
generator's life).
Pro: In reality (how you think about them), generator-functions are
actually factory functions that produce generator-iterators as if by
magic. In this respect they're radically different from non-generator
functions, acting more like a constructor than a function, so reusing
"def" is at best confusing. A "yield" statement buried in the body is
not enough warning that the semantics are so different.
BDFL: "def" it stays. No argument on either side is totally
convincing, so I have consulted my language designer's intuition. It
tells me that the syntax proposed in the PEP is exactly right - not too
hot, not too cold. But, like the Oracle at Delphi in Greek mythology,
it doesn't tell me why, so I don't have a rebuttal for the arguments
against the PEP syntax. The best I can come up with (apart from
agreeing with the rebuttals ... already made) is "FUD". If this had
been part of the language from day one, I very much doubt it would have
made Andrew Kuchling's "Python Warts" page.