[Python-Dev] Do PEP 526 type declarations define the types of variables or not? (original) (raw)
Koos Zevenhoven k7hoven at gmail.com
Mon Sep 5 19:40:28 EDT 2016
- Previous message (by thread): [Python-Dev] Do PEP 526 type declarations define the types of variables or not?
- Next message (by thread): [Python-Dev] Push PEP 528 (use utf8 on Windows) right now, but revert before 3.6 if needed
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Tue, Sep 6, 2016 at 1:49 AM, Sven R. Kunze <srkunze at mail.de> wrote:
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).
That's exactly the kind of semantics I'm describing in the python-ideas thread. An that's exactly how Python works: the type of a variable can change every time you assign a value to it (but not in between, unless you're doing funny stuff). So in a sense you annotate the value by annotating the variable at the point in the function where the value is assigned to it.
There are open questions in this approach of course. But if you're interested, don't hesitate to discuss or ask questions in the python-ideas thread. I won't answer before I wake up, though ;).
-- Koos
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 ofexpr
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 annotationx:Optional[int]
means that the variablex
has the typeOptional[int]
. So what is the type ofx
inreturn x
? If it isOptional[int]
, then a type checker is obliged to reject this code. If it isint
then what does "type of a variable" actually mean, and why aren't the other uses ofx
int as well? Cheers, Mark.
Python-Dev mailing list Python-Dev at python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/srkunze%40mail.de
--
- Koos Zevenhoven + http://twitter.com/k7hoven +
- Previous message (by thread): [Python-Dev] Do PEP 526 type declarations define the types of variables or not?
- Next message (by thread): [Python-Dev] Push PEP 528 (use utf8 on Windows) right now, but revert before 3.6 if needed
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]