代码之家  ›  专栏  ›  技术社区  ›  steffen

Python中的类型提示、链式赋值和多重赋值

  •  1
  • steffen  · 技术社区  · 6 年前

    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
    

    这些是我的尝试:

    >>> 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__ 我想说得更清楚。

    我使用的是python3.6.8。

    1 回复  |  直到 6 年前
        1
  •  21
  •   Mikhail Burshteyn    6 年前
    1. 正如在 PEP 526

      这与元组解包类似,存在歧义和可读性问题,例如:
      x: int = y = 1
      z = w: int = 1
      它是模棱两可的,y和z的类型应该是什么?第二行也很难解析。

    2. 对于解包,根据相同的PEP,应该在赋值之前为变量放置裸注释。政治公众人物的例子:

      # Tuple unpacking with variable annotation syntax
      header: str
      kind: int
      body: Optional[List[str]]
      header, kind, body = message