On Tuesday 22 March 2016 11:31, Ben Bacarisse wrote: > Ian Kelly <ian.g.ke...@gmail.com> writes: > >> On Mon, Mar 21, 2016 at 2:03 PM, Ben Bacarisse <ben.use...@bsb.me.uk> >> wrote: >>> For experts here: why can't I write a lambda that has a statement in it >>> (actually I wanted two: lambda l, i: l[i] += 1; return l)? >> >> https://docs.python.org/3/faq/design.html#why-can-t-lambda-expressions- contain-statements > > Thanks. That makes it clear that it's just for syntactic and not > semantic reasons. > > However, the explanation ("because Python’s syntactic framework can't > handle statements nested inside expressions") seemed, at first, to be > saying you can't because you can't! But the term "syntactic framework" > hints that it's not really just an arbitrary choice -- that this is > something about the way Python is parsed that make this choice > inevitable. Is it to do with the way that indentation has a syntactic > role?
Don't ask me for a link, because I'm lazy, but this has been discussed like a bazillion times in the past, here, and on the Python-Ideas and Python-Dev mailing lists. No offense intended, but if you want definitive statements from the core developers, you can google for them :-) But in a nutshell, there are four reasons for the limitation on Python's lambda statement: - The use of indentation makes it hard to insert arbitrary statements into an expression without confusing the parser. - Guido has a strict rule that Python's syntax must be parsable using a relatively simply parser. A LL(1) parser, if I remember correctly. So none of the fancy tricks and hard-to-understand syntax rules that (say) C++ uses. - Given those limitations, nobody has been able to come up with syntax that has broad support. - And besides, quite a large number of people believe that limiting lambda to simple, single-expression cases is a feature, not a bug. Nobody has quite ruled out multi-statement lambda, or code blocks, but after 20+ years of people trying to find syntax which works but isn't hated, and failing, I think it's probably safe to say it isn't going to happen. -- Steve -- https://mail.python.org/mailman/listinfo/python-list