使用Python输入提示和链接分配以及多个分配

时间:2019-06-15 16:03:46

标签: python python-3.x type-hinting chained-assignment

我猜这两个问题是相关的,因此我将它们一起发布:

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。

1 个答案:

答案 0 :(得分:3)

  1. PEP 526的“拒绝/推迟的投标”部分中明确指出的那样,不支持链式分配中的注释。引用PEP:

      

    这具有与元组拆包类似的歧义和可读性问题,例如:
      fs.js:121 Uncaught Error: ENOENT: no such file or directory, open 'stampandseal.png'
      x: int = y = 1
      这是模棱两可的,y和z的类型应该是什么?而且第二行很难解析。

  2. 要解压缩,请按照相同的PEP,在分配之前为变量添加裸注。 PEP的示例:

    z = w: int = 1