pre-PEP: Suite-Based Keywords

Bengt Richter bokr at oz.net
Sat Apr 16 21:44:26 EDT 2005


On Sat, 16 Apr 2005 14:02:32 -0700, Brian Sabbey <sabbey at u.washington.edu> wrote:

>Bengt Richter wrote:
>> On Fri, 15 Apr 2005 19:32:02 -0700, James Stroud <jstroud at mbi.ucla.edu> 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



More information about the Python-list mailing list