[Python-Dev] Do PEP 526 type declarations define the types of variables or not? (original) (raw)

Mark Shannon mark at hotpy.org
Tue Sep 6 11:25:48 EDT 2016


On 05/09/16 23:16, Greg Ewing wrote:

Mark Shannon wrote:

Unless of course, others may have a different idea of what the "type of a variable" means. To me, it means it means that for all assignments var = expr the type of expr must be a subtype of the variable, and for all uses of var, the type of the use is the same as the type of the variable. I think it means that, at any given point in time, the value of the variable is of the type of the variable or some subtype thereof. That interpretation leaves the type checker free to make more precise inferences if it can. For example, in...

How does that differ from annotating the type of the expression?

def foo()->int: x:Optional[int] = bar() if x is None: return -1 return x ...the type checker could notice that, on the branch containing 'return x', the value of x must be of type int, so the code is okay.

The issue is not whether the checker can tell that the type of the expression is int, but whether it is forced to use the type of the variable. The current wording of PEP 526 strongly implies the latter.

Cheers, Mark.



More information about the Python-Dev mailing list