On 2014-02-21, at 14:03 , M.-A. Lemburg <mal@egenix.com> wrote:
On 21.02.2014 13:25, Nick Coghlan wrote:
On 21 February 2014 22:18, Nick Coghlan <ncoghlan@gmail.com> wrote:
That's not very readable to most Python programmers, but what if you could write something like:
isprime = all(n % p for p in takewhile((: ? ** 2 < n), primes_seen))
This is somewhat similar to the implicit lambda proposal in http://legacy.python.org/dev/peps/pep-0312/, but with the following two essential differences:
1. The parentheses would be required (as per generator expressions, and as is being discussed for except expressions) 2. By using a "?" token within the implicit lambda, you would create a lambda that takes a single argument. If there is no such token, then it would take no arguments.
Oh, and under such a proposal, the generator expression:
(x for x in seq)
would be semantically equivalent to:
(: yield x for x in ?)(seq)
Currently, there's no underlying construct you can decompose a generator expression into, because there's no notation for a lambda expression with an anonymous parameter.
Hmm, this reminds me too much of regular expression syntax :-)
I wonder why people are so keen on stuffing too much logic into a single line. Must be a twitter/SMS side-effect.
"Line" is a red herring, I think. Nobody *really* cares about lines. "Expression" is the important factor. Moving stuff out of expressions and into separate statements requires finding out a name for the result, is generally significantly more verbose and isn't necessarily clearer. Depending on the situation, it may also require significant reworking of existing (supposedly working) code. I usually write non-trivial generator expressions over multiple lines, I may be after them remaining a single (readable) expression depending on context. Well that's just my experience anyway.
Programs don't get faster that way, they don't get more readable, you don't get to do more things that couldn't do otherwise and requiring a master in computer science to be able to understand what goes on in one of those magical lines doesn't feel right to me either, given that we are promoting Python as first programming language.
Was the MSCS insult really necessary?
Of course, tossing around ideas like these is fun and I don't want to spoil it. Eventually something useful will come out of these discussions, I'm sure :-)