Closures in leu of pointers?

Steven D'Aprano steve+comp.lang.python at pearwood.info
Mon Jul 1 03:36:54 EDT 2013


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



More information about the Python-list mailing list