異なる長さのタプルを引数として受け取る関数があります。
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
。