[Python-Dev] pep 362 - 5th edition

Yury Selivanov yselivanov.ml at gmail.com
Wed Jun 20 05:28:29 CEST 2012


On 2012-06-19, at 11:24 PM, Nick Coghlan wrote:

> On Wed, Jun 20, 2012 at 12:36 PM, Yury Selivanov
> <yselivanov.ml at gmail.com> wrote:
>> On 2012-06-19, at 9:22 PM, Yury Selivanov wrote:
>>> On 2012-06-19, at 8:39 PM, Nick Coghlan wrote:
>>>> 7. The idea of immutable Signature objects does highlight an annoyance
>>>> with the "attribute may be missing" style APIs. To actually duplicate
>>>> a signature correctly, including its return annotation (and assuming
>>>> the attribute is renamed), you would have to do something like:
>>>> 
>>>>   try:
>>>>       note = {"annotation": old_sig.annotation}
>>>>   except AttributeError:
>>>>       note = {}
>>>>   new_sig = Signature(old_sig.parameters[1:], **note)
>> 
>> BTW, we don't have slices for OrderedDict.  Since the slice object is
>> not hashable, we can implement it safely. I can create an issue (and draft
>> implementation), as I think it'd be quite a useful feature.
> 
> No need, my example was just wrong, it should be:
> 
> new_sig = Signature(old_sig.parameters.values()[1:])
> 
> The constructor accepts an iterable of Parameter objects rather than a mapping.

That's the code I've ended up with:

        sig = signature(obj.__func__)
        return Signature(OrderedDict(tuple(sig.parameters.items())[1:]),
                         **sig.optional)

Still looks better than creating implicit & explicit copies ;)

As for slices support in OrderedDict -- it would return values, so
it won't solve the problem anyways.

-
Yury


More information about the Python-Dev mailing list