如何使用python类型指定这种可变参数元组?

时间:2019-02-24 20:34:49

标签: python python-typing

我正在尝试这样做,但是我不确定如何指定类型签名:

def initialize_signals(
        self,
        command: InitializeCommand,
        initializers: Iterable[Union[
            Tuple[SignalNode],
            Tuple[SignalNode, Any, ...]
                  ]]):
    for x, *args in initializers:
        potential_update = command.create_potential_update(x, *args)

1 个答案:

答案 0 :(得分:2)

当前没有注释可以表示添加固定长度元组和可变长度元组。

这是一些我用来确定mypy的推理如何处理这样的代码的代码:

from typing import Tuple

x: Tuple[int, ...]
y = ('hi', *x)
z = (*x,)
reveal_type(y)
reveal_type(z)

并输出:

$ mypy t.py
t.py:6: error: Revealed type is 'builtins.tuple[builtins.object*]'
t.py:7: error: Revealed type is 'builtins.tuple[builtins.int*]'

尽管知道它是一个变长的int元组,但它会衰减到object

您可能希望重构代码以改为使用Tuple[SignalNode, Tuple[Any, ...]]