可変長のタプルを受け取る関数に注釈を付けるにはどうすればいいですか? (可変長タプル型注釈) 質問する

可変長のタプルを受け取る関数に注釈を付けるにはどうすればいいですか? (可変長タプル型注釈) 質問する

異なる長さのタプルを引数として受け取る関数があります。

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タプルで実際に動作し、可変長の不変リストとして使用します。インターネット上でこのトピックに関するコンセンサスが見つからないため、この種の入力にどのように注釈を付ければよいのか疑問に思っています。

ベストアンサー1

次のように...リテラル (別名)を使用して可変長の同種タプルに注釈を付けることができます。Ellipsis

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

またはPython3.9以上

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

その後、エラーは解消されるはずです。

からドキュメント:

同種の可変長タプルを指定するには、リテラル省略記号を使用しますTuple[int, ...]。例: プレーンTupleは と同等でありTuple[Any, ...]、 と同等ですtuple

おすすめ記事