I really like blocks, but Python deliberately makes it harder to support those in return for not needing scope delimiters in the majority of code that isn't using blocks. It seems like a reasonable choice to me.
(And yes, not all one liners need it. I know.)
And list comprehensions seems like a kludge from a lack of real lambdas (map). So that is an extra concept.
Edit: Ruby doesn't have closures?!
Edit 2: 2nd paragraph of the linked article: "In Ruby, Objective-C, and C, functions are not first-class objects, they don't capture closures, and they can't be defined inline." For Ruby, that don't claim there are no closures at all. Got it.
You don't see the pattern often, as it's far less idiomatic than passing procs as a block, but you can do it.
Also, def is an expression in recent versions of Ruby. I don't remember exactly which version introduced it, but def returns the method that it created.
They added that in 2.1 Well, it was always an expression... in Ruby, every statement is an expression. But it always used to return nil. Now it returns the symbol of the method name. Still not as good as returning a method object, but since you can easily get the method object from the symbol, in practice there's no difference.
While blocks are nice to have, I've yet to see a good proposed syntax for them in Python.
Sure, but then again not all trade-offs make the right trade, err, off.
>It may be the right trade-off for some users and the wrong trade-off for others.
Well, then it matters how big are those groups relative to each other, and perhaps which one does something that's more important with the language and more tied to its core principles.
TIL that PHP is even scarier than I thought.