Referring to the alternative syntax forms: # Proposed x: int = func(value)
# Already accepted x = func(value) #type: int On Sun, Sep 04, 2016 at 11:52:24AM +0100, Mark Shannon wrote: > The key difference is in placement. > PEP 484 style > variable = value # annotation > > Which reads to me as if the annotation refers to the value. Both Guido and the PEP have stated that it doesn't refer to the value, but to the variable. But what does it even mean to say that it refers to the value in the context of *static type-checking*? I know what it means in the context of dynamic type-checking, but I don't see how that has any relevance to a static checker. I have seen a number of people commenting that the comment annotation "applies to the expression", but I don't understand what this is supposed to mean. How is that different from applying it to the variable? (That's not a rhetorical question.) Suppose I write this: mylist = [] x = False or None or (mylist + [1]) #type: List[int] pass # stand-in for arbitrary code x.append("definitely not an int") Should the type-checker flag the call to x.append as an error? I hope we all agree that it should. But it can only do that if it knows the type of the variable `x`. This is a *static* type-checker, it doesn't know what value x *actually* has at run-time because it isn't running at run-time. As far as the static checker is concerned, it can only flag that append as an error if it knows that `x` must be a list of ints. If you distinguish the two cases: "the expression `False or None or (mylist + [1])` is List[int]" versus: "the variable `x` is List[int]" I don't even see what the first case could possible mean. But whatever it means, if it is different from the second case, then the type-checker is pretty limited in what it can do. > PEP 526 > variable: annotation = value > > Which reads very much as if the annotation refers to the variable. Since the PEP makes it clear that the two forms are to be treated the same, I think that whatever difference you think they have is not relevant. They are *defined* to mean the same thing. -- Steve _______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com