[Python-Dev] pep 362 - 5th edition

Yury Selivanov yselivanov.ml at gmail.com
Wed Jun 20 05:04:22 CEST 2012


On 2012-06-19, at 10:16 PM, Nick Coghlan wrote:

> On Wed, Jun 20, 2012 at 11:22 AM, Yury Selivanov
> <yselivanov.ml at gmail.com> wrote:
>>> 10. Similar to the discussion of convenience properties on Signature
>>> objects themselves, I now think we should drop the "args" and "kwargs"
>> 
>> Big -1 on this one.  Look at the current implementation of those
>> properties - it's quite complex.  One of the major points of new
>> API is to allow easy modifications of arguments.  Without .args &
>> .kwargs it will be a PITA to call a function.
>> 
>> Imagine, that the "check types" example from the PEP is modified
>> to coerce arguments to specified types.  It won't be possible
>> to do without .args & .kwargs.  I, for instance, use this API to bind,
>> validate, and coerce arguments for RPC calls. The whole point for me
>> to work on this PEP was to make these types of functionality easy to
>> implement.
> 
> The one thing that slightly concerns me is that given:
> 
>    def f(a): pass
>    s = signature(f)
> 
> The following produce the same result:
>    s.bind(1)
>    s.bind(a=1)
> 
> That said, I guess if a parameter is proclaiming itself to be
> KEYWORD_OR_POSITIONAL, then it really shouldn't care which way the
> arguments are passed, so a stated preference for binding those as
> positional parameters is fine.

Right.

>>> properties from the initial version of BoundArguments. Instead, I
>>> propose the following attributes:
>>>  - arguments (mapping of parameter names to values supplied as arguments)
>>>  - defaults (mapping of unbound parameter names with defaults to
>>> their default values)
>> 
>> Why would you need 'defaults'?  It's very easy to compile that list
>> manually (and I believe the use cases will be limited)
>> 
>>>  - unbound (set of unbound names, always empty for bind(), may have
>>> entries for bind_partial())
>> 
>> This may be practical.  But again - those are easy to deduce from
>> 'BoundArguments.arguments' and 'Signature.parameters'.
> 
> OK, leave them out for now. Perhaps add a simple example showing how
> to calculate them if you want them? (The most obvious use case I can
> see is calculating a new signature after using bind_partial)

OK, will add an example to the PEP

-
Yury


More information about the Python-Dev mailing list