如何使用 python 类型指定这种可变参数元组?
How do I specify this kind of variable argument tuple with 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)
目前还没有可以表示固定长度元组与可变长度元组相加的注解。
这是我用来确定 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, ...]]
代替
我正在尝试这样做,但我不确定如何指定类型签名:
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)
目前还没有可以表示固定长度元组与可变长度元组相加的注解。
这是我用来确定 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, ...]]
代替