On Mon, 2008-09-15 at 13:00 +1200, Greg Ewing wrote:
Cliff Wells wrote:
'-'.join( for j in ( for J in I: YIELD J ): YIELD j )
Noooooo..... this is getting worse and worse.
You seem to be thinking of syntax issues as though they were purely technical puzzles. The're not -- they're at least as much human-factors issues
Not that it's terribly relevant to what you say, but:
'-'.join ( for J in I: YIELD ( for j in J: YIELD j ) )
is the corrected form (although YIELD continues to be a placeholder of course).
In any case, my form does make it slightly more complicated for the simplest case, but makes it much less complicated for more complex cases (for the same reasons a plain for-statement can):
x = [ J [ a ] for a in b if c ]
vs
x = for a in b: if c: continue J [ a ]
The complexity has barely increased and yet the second form is already more readable (the formatting of the first reflects what I typically do as listcomps get more complex - overkill here but it demonstrates where I'm going).
Given that the listcomp is the only direct form of looping available as an expression, I've written some really ugly looking ones. I've actually taken to commenting open/close brackets simply to help distinguish them. Not to mention, the listcomp's placement of the yielded result before the loop and condition only works well when it's a very simple expression. It doesn't scale well with complexity (not that I think it was meant to).
Certainly more clear and concise, but since (luckily for me this time) we're maintaining backwards-compatibility, that form would still be available.
But if you keep all the existing syntax as well, you haven't simplified anything.
Yes, that's unfortunate. It might, however, obviate the need for newer ones.
Cliff