I guess these two questions are related, so I'll post them together:
1.- Is it possible to put type hint in chained assignments?
These two attempts failed:
>>> def foo(a:int):
... b: int = c:int = a
File "<stdin>", line 2
b: int = c:int = a
^
SyntaxError: invalid syntax
>>> def foo(a:int):
... b = c:int = a
File "<stdin>", line 2
b = c:int = a
^
SyntaxError: invalid syntax
2.- Is it possible to put type hint in multiple assignments?
These were my attempts:
>>> from typing import Tuple
>>> def bar(a: Tuple[int]):
... b: int, c:int = a
File "<stdin>", line 2
b: int, c:int = a
^
SyntaxError: invalid syntax
>>> def bar(a: Tuple[int]):
... b, c:Tuple[int] = a
...
File "<stdin>", line 2
SyntaxError: only single target (not tuple) can be annotated
>>> def bar(a: Tuple[int]):
... b, c:int = a
...
File "<stdin>", line 2
SyntaxError: only single target (not tuple) can be annotated
I am aware that in both cases the type is inferred from the type hint of a, but I have a long variable list (in the __init__
of a class) and I want to be extra-explicit.
I am using Python 3.6.8.
As explicitly stated in PEP 526, section "Rejected/postponed proposals", annotations in chained assignments are not supported. Quoting the PEP:
This has problems of ambiguity and readability similar to tuple unpacking, for example in:
x: int = y = 1
z = w: int = 1
it is ambiguous, what should the types of y and z be? Also the second line is difficult to parse.
For unpacking, per the same PEP, you should place bare annotations for your variables before the assignment. Example from the PEP:
# Tuple unpacking with variable annotation syntax
header: str
kind: int
body: Optional[List[str]]
header, kind, body = message