How do I specify this kind of variable argument tuple with python typing?

半腔热情 提交于 2019-12-31 02:46:07

问题


I'm trying to do this, but I'm not sure how to specify the type signature:

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:


there currently isn't an annotation which can represent the addition of a fixed-length tuple with a variable length tuple.

here's some code I used to determine how mypy's inference would handle something like this:

from typing import Tuple

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

and output:

$ 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*]'

despite knowing that it's a variable-length int tuple it decays to object.

You may want to refactor your code to use Tuple[SignalNode, Tuple[Any, ...]] instead



来源:https://stackoverflow.com/questions/54856277/how-do-i-specify-this-kind-of-variable-argument-tuple-with-python-typing

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!