On a related note, I think that generator functions should in some way
be explicitly marked as such in the declaration, rather than needing to
scan the entire function body for a yield statement to determine whether
it's a generator or not.
That was considered when generators were introduced in Python 2.2.
Guido's rationale for preferring to keep "def" for both generator
functions and normal functions is given in the PEP:
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.
http://www.python.org/dev/peps/pep-0255/
5+ versions later, I think that Guido has been shown to be correct. Even
if you believe that generator functions would have been better with
different syntax, there is no evidence that re-using def is actively
harmful.