[Python-Dev] A Desperate Plea For Introspection (aka: BDFAP Needed)

Yury Selivanov yselivanov.ml at gmail.com
Fri Jun 22 21:52:55 CEST 2012


On 2012-06-22, at 3:47 PM, Ethan Furman wrote:

> Guido van Rossum wrote:
>> On Fri, Jun 22, 2012 at 12:24 PM, Yury Selivanov
>> <yselivanov.ml at gmail.com> wrote:
>>> On 2012-06-22, at 3:18 PM, Guido van Rossum wrote:
>>> 
>>>> On Fri, Jun 22, 2012 at 12:10 PM, Yury Selivanov
>>>> <yselivanov.ml at gmail.com> wrote:
>>>>> Yes, I meant optional.  Would 'name(arg1, *, [arg2])' be better?
>>>> Hardly, because that's not valid syntax. I'd write name(arg1, *,
>>>> arg2=<default>).
>>> Like
>>> 
>>>   replace(*, name=<default>, kind=<default>, default=<default>,
>>>                                 annotation=<default>) -> Parameter
>>> 
>>> or
>>> 
>>>   replace(*, name=<optional>, kind=<optional>, default=<optional>,
>>>                                 annotation=<optional>) -> Parameter
>> Either one's an improvement, but you'll have to explain at the top of
>> the PEP what you intend this notation to mean. I'd go with <optional>
>> since the key thing here seems to be that various keywords, when not
>> specified, mean that nothing changes. OTOH in some places you can
>> probably write "foo=Signature.empty" (etc.).
> 
> Parameter names that follow '*' in the signature are not optional (unless that has changed since 3.2).  In other words, the above signature requires that name, kind, default, and annotation be specified by name *and* be given values when replace is called)

I know.  Those are optional keyword-only arguments.

In the code:

    def replace(self, *, name=_void, kind=_void, annotation=_void,
                default=_void):

We just need some clear convention for the PEP - and the <optional>
mark should work.

-
Yury


More information about the Python-Dev mailing list