[EMAIL PROTECTED] wrote: > But [embedding a definition, ks] is awkward since the lambda is constrained > to be one > line; you > can't come back later and add much to the callback's code. > Furthermore, this example isn't even legal, because 'print' isn't a > function, but a statement -- lambda is further constrained to only > contain an expression. > > Many have complained about this crippled-ness of lambda, but it > actually makes some sense. Since Python uses colons and indentation to > define blocks of code, it would be awkward to close a multiline lambda. > The best I could think of would look like > > deferred.addCallback(lambda r: > print("fancy formatting %s" % r.text) > ) > > ^ > | > > That trailing paranthesis is WAY un-Pythonic.
Maybe it is not common place because some users are underinformed and hypnotized by whitespace semantics but you can add a trailing backslash to achieve line coninuation within a single expression: >>> deferred.addCallback(lambda r: puts("fancy formatting %s" \ ... )) This works syntactically. [...] > There might be some sort of overlap with PEP 343 and the 'with' > statement, but I'm not sure exactly. Sorry I'm late to the game and > commenting on last year's PEP's, but I've only started reading them. > Note that PEP's 343 and 340 are very focused on resource management -- > but I think that letting one define code blocks as closures could make > resource handling routines be easily written in Python. The with statement is already implemented in Python 2.5. http://docs.python.org/whatsnew/pep-343.html The main difference between the with statement and Ruby blocks is that the with-statement does not support loops. Yielding a value of a function decorated with a contextmanager and passing it to the BLOCK of the with statement is essentially a one-shot. Therefore you can't use the with statement to define iterators. It is not a lightweight visitor pattern replacement as it is in Ruby. Hence the with- and the for-statement are orthogonal to each other in Python. -- http://mail.python.org/mailman/listinfo/python-list