如何注释采用可变长度元组的函数? (多元元组类型注释)

问题描述 投票:8回答:2

我有一个采用不同长度的元组作为参数的函数:

from typing import Tuple


def process_tuple(t: Tuple[str]):
    # Do nasty tuple stuff

process_tuple(("a",))
process_tuple(("a", "b"))
process_tuple(("a", "b", "c"))

当我注释上述函数时,出现这些错误消息

fool.py:9: error: Argument 1 to "process_tuple" has incompatible type "Tuple[str, str]"; expected "Tuple[str]"
fool.py:10: error: Argument 1 to "process_tuple" has incompatible type "Tuple[str, str, str]"; expected "Tuple[str]"

process_tuple确实适用于元组,我将它们用作可变长度的不可变列表。我尚未在互联网上找到关于此主题的任何共识,因此我想知道该如何注释这种输入。

python python-3.x type-hinting mypy
2个回答
17
投票

我们可以使用...文字(也称为Ellipsis)来注释可变长度的均值元组,例如

def process_tuple(t: Tuple[str, ...]):
    ...

此后错误应消失。

来自docs

要指定同构类型的变长元组,请使用文字省略号,例如Tuple[int, ...]。普通的Tuple等效于Tuple[Any, ...],然后依次转到tuple


1
投票

除了Azat发表的省略号答案之外,您还可以使用@typing.overload@typing.overload使其更明确。>

typing.Union

或与工会:

typing.Union
© www.soinside.com 2019 - 2024. All rights reserved.