3 ms·
This doesn't follow: for loops are there specifically for cases of the complexity that can't be handled by other constructs (like comprehensions). Anonymous fun
by joshuamorton 7y ago
This doesn't follow: for loops are there specifically for cases of the complexity that can't be handled by other constructs (like comprehensions). Anonymous functions are not, for the complex cases you give the construct a name.
It's a very intentional language limitation, much as semantic whitespace is an intentional limitation.
And there is actually a language difference. A for loop is a statement. A lambda is an expression. Python doesn't let you put statements into expressions.
- lesserknowndan 7y agoI tentatively disagree with both of you. I've sometimes wondered whether code would be universally clearer if all you could do in a loop is have a one-liner or call another function/method (mainly when looking at my own code within loops and thinking WTF!!!). Would probably cause issues when teaching programming though. It would be interesting to have a compiler switch that enforced this...
- baddox 7y agoWhat comes to mind immediately is that you would lose the ability to `break` unless you had another convention like returning a specific value to indicate you want to break.
- lesserknowndan 7y agoIf you are limited to one statement you could still do something along the lines of the following (no particular language): foreach ( $item in $list ) { if ( 1 == some_function( $item ) ) { continue; } else if ( 2 == some_function( $item ) ) { break; } else { another_function( $item ); } } But I would immediately concede that it is starting to miss the entire point of why it was enforced in the first place...
- joshuamorton 7y agoI actually like this style (or similar if not quite as extreme). I find it's much clearer what's going on.