[Python-Dev] Please reject or postpone PEP 526

Mark Shannon mark at hotpy.org
Sun Sep 4 06:52:24 EDT 2016


On 02/09/16 19:19, Steven D'Aprano wrote:
> On Fri, Sep 02, 2016 at 10:47:41AM -0700, Steve Dower wrote:
>> "I'm not seeing what distinction you think you are making here. What
>> distinction do you see between:
>>
>>     x: int = func(value)
>>
>> and
>>
>>     x = func(value)  #type: int"
>>
>> Not sure whether I agree with Mark on this particular point, but the
>> difference I see here is that the first describes what types x may
>> ever contain, while the latter describes what type of being assigned
>> to x right here. So one is a variable annotation while the other is an
>> expression annotation.
>
> Ultimately Python is a dynamically typed language, and that's not
> changing. This means types are fundamentally associated with *values*,
> not *variables* (names). But in practice, you can go a long way by
> pretending that it is the variable that carries the type. That's the
> point of the static type checker: if you see that x holds an int here,
> then assume (unless told differently) that x should always be an int.
> Because in practice, most exceptions to that are due to bugs, or at
> least sloppy code.
>
> Of course, it is up to the type checker to decide how strict it wants to
> be, whether to treat violations as a warning or a error, whether to
> offer the user a flag to set the behaviour, etc. None of this is
> relevant to the PEP. The PEP only specifies the syntax, leaving
> enforcement or non-enforcement to the checker, and it says:
>
>     PEP 484 introduced type hints, a.k.a. type annotations. While its
>     main focus was function annotations, it also introduced the notion
>     of type comments to annotate VARIABLES [emphasis added]

If I recall, Guido and I agreed to differ on that point. We still do, it 
seems. We did manage to agree on the syntax though.

>
> not expressions. And:
>
>     This PEP aims at adding syntax to Python for annotating the types
>     of variables and attributes, instead of expressing them through
>     comments
>
> which to me obviously implies that the two ways (type comment, and
> variable type hint) are intended to be absolutely identical in
> semantics, at least as far as the type-checker is concerned.

The key difference is in placement.
PEP 484 style
variable = value # annotation

Which reads to me as if the annotation refers to the value.
PEP 526
variable: annotation = value

Which reads very much as if the annotation refers to the variable.
That is a change in terms of semantics and a change for the worse, in 
terms of expressibility.

Cheers,
Mark.



More information about the Python-Dev mailing list