[Python-ideas] explicitation lines in python ?

Stephen J. Turnbull stephen at xemacs.org
Sat Jun 26 04:58:35 CEST 2010

Daniel DELAY writes:

 > (Sorry if this has already been discussed earlier on this list, I have 
 > not read all the archives)

I think if you search for "first-class blocks" and "lambdas", or
similar, you'll find related discussion (although not exactly the same
thing).  It also looks very similar to the Haskell "where", maybe
searching for "Haskell where" would bring it up.

 > Renouncing to list comprehension occurs rather often when I write python 
 > code
 > I think we could greatly improve readability if we could keep list 
 > comprehension anywhere in all cases, but when necessary explicit a too 
 > complex expression in an indented line :
 > htmltable = ''.join( '<tr>{}</tr>'.format(htmlline) for line in table):
 >     htmlline : ''.join( '<td>{}</td>'.format(cell) for cell in line)

(Edited for readability; it was munged by your mail client. ;-)

I'm not sure I like this better than the alternative of rewriting the
outer loops explicitly.  But if you're going to add syntax, I think
the more verbose

    htmltable = ''.join('<tr>{}</tr>'.format(htmlline) for line in table) \
        with htmlline = ''.join('<td>{}</td>'.format(cell) for cell in line)

looks better.  Note that the "with" clause becomes an optional part of
an assignment statement rather than a suite controlled by the
assignment, and the indentation is decorative rather than syntactic.
I considered "as" instead of "=" in the with clause, but preferred the
"=" because that allows nested "with" in a natural way.  (Maybe, I
haven't thought carefully about that at all.)  Obviously "with" was
chosen because it's already a keyword.

I suspect this has been shot down before, though.

More information about the Python-ideas mailing list