[Python-Dev] accumulator display syntax (original) (raw)
Sean Ross seandavidross at hotmail.com
Fri Oct 17 12:43:31 EDT 2003
- Previous message: list.sort, was Re: [Python-Dev] decorate-sort-undecorate
- Next message: [Python-Dev] accumulator display syntax
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Hi. I've not posted to this group before, but I've been following most of the discussions on it with interest for about 6 months. Yesterday I saw this post:
Guido van Rossum wrote:
I don't have a proposal for generator comprehension syntax though, and [yield ...] has the same problem.
I actually like the [yield ...] syntax, (I find the intent clear, and have no expectations of its returning a list) but since that doesn't look like it will be happening, I've tried to think of some other possible syntax. I've come up with 16 different possibilities so far, including [yield ...], which I've listed below. I'm not advocating any one of them (in fact, many of them are abhorrent), I'm just listing some possibilities, in no particular order other than as they occurred to me:
(1) no delimiter
sumofsquares = sum(yield x*x for x in myList)
(2) brackets
sumofsquares = sum([yield x*x for x in myList])
(3) parentheses
sumofsquares = sum((yield x*x for x in myList))
(4) braces
sumofsquares = sum({yield x*x for x in myList})
(5) pipes
sumofsquares = sum(|yield x*x for x in myList|)
(6) slashes
sumofsquares = sum(/yield x*x for x in myList/)
(7) carets
sumofsquares = sum(^yield x*x for x in myList^)
(8) angle brackets
sumofsquares = sum(<yield x*x for x in myList>)
(9) sigil @
sumofsquares = sum(@yield x*x for x in myList@)
(10) sigil $
sumofsquares = sum($yield x*x for x in myList$)
(11) question marks
sumofsquares = sum(?yield x*x for x in myList?)
(12) ellipses
sumofsquares = sum(...yield x*x for x in myList...)
(13) yield:
sumofsquares = sum(yield:[x*x for x in myList])
(14) unpacking (*)
sumofsquares = sum([xx for x in myList])
(15) <-
sumofsquares = sum(<-[x*x for x in myList])
#(16) ^ sumofsquares = sum(^[x*x for x in myList])
These last few suggestion (from (13) on) may require some explanation. The notion I've had for "yield:" is to have it act something like a lambda so that the list comprehension is not evaluated, i.e., no list is constructed in memory. Instead, an iterator is created that can be used to generate the items, one at a time, that would have been in that list. Something like
def squares(myList): for x in myList: yield x*x
sumofsquares = sum(squares(myList))
The other suggestions, after (13), are based on this same notion.
Okay. So, there are some generator comprehension syntax ideas. Hopefully they will be useful, even if they just serve as items to point to and say "we definitely don't want this".
I thank you for your time, and I apologize if these unsolicited suggestions are unwanted.
Sean Ross
Add photos to your e-mail with MSN 8. Get 2 months FREE*.
http://join.msn.com/?page=features/featuredemail
- Previous message: list.sort, was Re: [Python-Dev] decorate-sort-undecorate
- Next message: [Python-Dev] accumulator display syntax
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]