[Python-ideas] And now for something completely different

Josiah Carlson josiah.carlson at gmail.com
Thu Sep 18 02:40:44 CEST 2008


On Wed, Sep 17, 2008 at 5:27 PM, Cliff Wells <cliff at develix.com> wrote:
> On Wed, 2008-09-17 at 16:18 -0700, Bruce Leban wrote:
>> On Wed, Sep 17, 2008 at 3:41 PM, Cliff Wells <cliff at develix.com>
>> wrote:
>>         I'd prefer to write
>>
>>         def foo ( lambda: arg ):
>>            return arg # evaluation happens here
>>         foo ( x )
>>
>>         ("lambda" not necessarily being the actual name of the token
>>         in the
>>         second case).
>>
>>
>> I'd rather use the time machine. You can already do this quite
>> easily.
>>
>>
>> def foo (arg):
>>    return arg() # evaluation happens here
>> foo(lambda: x)
>
> Except I'd prefer not having lambda sprinkled throughout the calling
> code (or worse, forgotten).
>
>> The idea of something automagically changing from an unevaluated to an
>> evaluated value strikes me as a very bad one so requiring explicit
>> evaluation here is a *good* thing. Aside from that, why should arg be
>> evaluated on return as opposed to being passed along unevaluated until
>> its value is really needed?
>
> Didn't suggest that.  That was merely an example.  What I'm suggesting
> is that the *first* time it's used, evaluate then (my example used
> return for simplicity).
>
>>  How would I check to see if an arg was provided? I certainly can't
>> use a default value of None and then check for None since the check
>> would cause it to be evaluated.
>
> I don't consider that a problem.  You either care about the value of an
> argument or you don't.  If you care then you will eventually evaluate it
> anyway.  If you don't, then don't evaluate it, ever.
>
>>  Maybe we have a special operator that allows us to look at the
>> unevaluated value. What's the context of the evaluation? Can it access
>> variables in the place where it's evaluated? Maybe there's a special
>> way to do that too.  Let's not go down that path.
>
> Agreed we shouldn't go down that path, but don't agree that it's needed.

Back when you were talking about statements -> expressions, I was
going to point out deferred function calls, but I also ran into the
"lambda is ugly" problem.

If it weren't for the fact that backticks ` are difficult to
distinguish from regular single quotes ', never mind being a PITA to
type on some keyboards, I would *almost* suggest that backticks should
be used for expressing "a function without arguments, aka a deferred
execution expression".

But then I'd have to give myself a -1, as it violates TOOWTDI.

Then again, the argument could be made that lambdas are just a long
spelling of a def without a name, and that ... add = def (arg1, arg2):
arg1+arg2 would be better.  At that point, we come to def:'deferred' .
 And I think that's ever worse than backticks.

I don't know of a spelling of deferred execution blocks that I would
find reasonable :/ .

 - Josiah



More information about the Python-ideas mailing list