On Sat, 29 Jun 2013 23:46:12 -0600, Ian Kelly wrote: > 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. -- Steven -- http://mail.python.org/mailman/listinfo/python-list