我猜这两个问题是相关的,因此我将它们一起发布:
1.-是否可以在链接的分配中添加类型提示?
这两次尝试均失败:
>>> 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.-是否可以在多个作业中添加类型提示?
这些是我的尝试:
>>> 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
我知道,在两种情况下,类型都是从a的类型提示中推断出来的,但是我有一个很长的变量列表(在类的__init__
中),并且我想更加明确。 / p>
我正在使用Python 3.6.8。
答案 0 :(得分:3)
如PEP 526的“拒绝/推迟的投标”部分中明确指出的那样,不支持链式分配中的注释。引用PEP:
这具有与元组拆包类似的歧义和可读性问题,例如:
fs.js:121 Uncaught Error: ENOENT: no such file or directory, open 'stampandseal.png'
x: int = y = 1
这是模棱两可的,y和z的类型应该是什么?而且第二行很难解析。
要解压缩,请按照相同的PEP,在分配之前为变量添加裸注。 PEP的示例:
z = w: int = 1