On Sat, 16 Apr 2005 14:02:32 -0700, Brian Sabbey <[EMAIL PROTECTED]> wrote:

>Bengt Richter wrote:
>> On Fri, 15 Apr 2005 19:32:02 -0700, James Stroud <[EMAIL PROTECTED]> wrote:
>>>> Examples
>>>> ========
>>>>
>>>> Using suite-based keyword arguments, the code
>>>>
>>>> f(x = 1)
>>>>
>>>> is equivalent to
>>>>
>>>> f():
>>>>     x = 1
>>
>>   f(**def():
>>         x = 1
>>         return vars())
>
>Yes, it seems it would just be sugar for full lambdas.  Although, in this 
>example and the others, wouldn't you have to actually call the anonymous 
>function?
D'oh, yes, but you got the idea ;-)
>
>f(**(def():
>       x = 1
>       return vars())())
>
>Otherwise it seems like you are trying to pass a function, not the 
>keywords the function returns.
>
>One could, of course, also do the same with a named function:
>
>def no_longer_anonymous():
>       x = 1
>       return vars()
>
>f(**no_longer_anonymous())

Yes, but that does away with the trailing suite definition of the bindings from 
the pov of f ;-)

BTW, I hope you will read my latest post replying to Kay Schluehr, where I 
propose some different
spellings ;-)

    f():
        x = 1

would be spelled

    f(**kw) where:
        kw = dict(::
            x = 1)

or could also be

    f(x=x) where:
        x = 1

"::" is a unary suite operator that returns an ordered vars().items() 
representing the net bindings made
in the suite (i.e. del <name> will remove a binding just as for vars()). 
::<suite> is a first class expression.

    items = ::
        x = 1
        y = 2
    print items => (('x', 1), ('y', 2))

"where:" is an expression trailer introducing a suite like :: except that the 
bindings are used to evaluate
the names in the expression that the "where:" trails, not to produce an items() 
tuple.

See the other post replying to Kay for more, superseding some things in my 
reply to you ;-)

Regards,
Bengt Richter
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to