> My vote is for a "generator" keyword to introduce the code block of a > generator. Makes perfect sense to me, and it will be a strong > indication to anybody reading my code that something special is going > on. And something special /is/ going on! > > An informal poll of PythonLabs indicates a split on this subject, > perhaps setting Jeremy up as a Sandra Day O'Conner swing vote. But > who said this was a democracy anyway? :) > > somewhat-like-my-own-country-of-origin-ly y'rs, > -Barry That's a nice analogy, Ruth Barry Ginsburg; a Supreme Court, which appoints the president, seems a closer fit to Python's dictatorship than some sort of democratic process. I wasn't present for the oral arguments, but I'm sure we all know how Tim Scalia voted and that Guido van Clarence Thomas agreed without comment. I assume, then, that Anthony Kennedy Jr. joined you, although he's often a swing vote, too. Can't wait to hear the report from Nina "Michael Hudson" Totenberg. I was originally happy with the use of def. It's not much of a stretch since the def statement defines a code block that has formal parameters and creates a new scope. I certainly wouldn't be upset if Python ended up using def to define a generator. I appreciate, though, that the definition of a generator may look an awful lot like a function. I can imagine a user reading a module, missing the yield statement, and trying to use the generator as a function. I can't imagine this would happen often. My limited experience with CLU suggests that iterators aren't going to be huge, unwieldy blocks where it's hard to see what the ultimate control flow is. If a confused user treats a generator as a regular function, he or she certainly can't expect it to return anything useful, since all the return statements are bare returns; the expected behavior would be some side-effect on global state, which seems both unlikely and unseemly for an iterator. I'm not sure how hard it will be to explain generators to new users. I expect you would teach functions and iterations via for loop, then explain that there is a special kind of function called a generator that can be used in a for loop. It uses a yield statement instead of a return statement to return values. Not all that hard. If we use a different keyword to introduce them, you'd probably explain them much the same way: A generator is a special kind of function that can be used in a for loop and is defined with generator instead of def. As other people have mentioned, Icon doesn't use special syntax to introduce generators. We might as well look at CLU, too, where a different approach. You can view the CLU Reference Manual at: http://ncstrl.mit.edu/Dienst/UI/2.0/Describe/ncstrl.mit_lcs%2fMIT%2fLCS%2fTR -225 It uses "proc" to introduce a procedure and "iter" to introduce an iterator. See page 72 for the details: http://ncstrl.mit.edu/Dienst/UI/2.0/Page/ncstrl.mit_lcs%2fMIT%2fLCS%2fTR-225 /72 It's a toss up, then between the historical antecedents Icon and CLU. I'd tend to favor a new keyword for generators, but could be talked out of that position. Jeremy
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4