Didn't Koos say this works more like an expression annotation?
IMO, the type of the expression is what is specified but the type of the
variable can change over time (as you demonstrated).
Sven
PS: thinking this way, the new syntax is actually confusing as it
annotates the variable not the expression. :-/
On 05.09.2016 17:26, Mark Shannon wrote:
Hi,
PEP 526 states that "This PEP aims at adding syntax to Python for
annotating the types of variables" and Guido seems quite insistent
that the declarations are for the types of variables.
However, I get the impression that most (all) of the authors and
proponents of PEP 526 are quite keen to emphasise that the PEP in no
way limits type checkers from doing what they want.
This is rather contradictory. The behaviour of a typechecker is
defined by the typesystem that it implements. Whether a type
annotation determines the type of a variable or an expression alters
changes what typesystems are feasible. So, stating that annotations
define the type of variables *does* limit what a typechecker can or
cannot do.
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.
In this example:
def bar()->Optional[int]: ...
def foo()->int:
x:Optional[int] = bar()
if x is None:
return -1
return x
According to PEP 526 the annotation `x:Optional[int]`
means that the *variable* `x` has the type `Optional[int]`.
So what is the type of `x` in `return x`?
If it is `Optional[int]`, then a type checker is obliged to reject
this code. If it is `int` then what does "type of a variable" actually
mean,
and why aren't the other uses of `x` int as well?
Cheers,
Mark.
_______________________________________________
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/srkunze%40mail.de
_______________________________________________
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