TypeHinting tuples in Python
When I want to typehint a tuple in Python like:
def func(var: tuple[int, int]):
# do something
func((1, 2)) # would be fine
func((1, 2, 3)) # would throw an error
It is required to give the exact number of items in the tuple. That's different from list typehinting:
def func(var: list[int]):
# do something
func([1]) # would be fine
func([1, 2]) # would also be fine
func([1, 2, 3]) # would also be fine
That's consequentially, in a way, because of the type of tuples. Because they are designed not to be changed, you have to hardcode the amount of items in it.
So my question is, is there a way to make the number of items in a tuple type hint flexible? I tried something like that but it didn't work:
def func(var: tuple[*int]):
Yes, you can make the number of items in a tuple type hint flexible:
from typing import Tuple
def func(var: Tuple[int, ...]):
pass
From the docs: https://docs.python.org/3/library/typing.html#typing.Tuple
To specify a variable-length tuple of homogeneous type, use literal ellipsis, e.g.
Tuple[int, ...]
. A plainTuple
is equivalent toTuple[Any, ...]
, and in turn totuple
.
Starting with PEP 585 it is possible to use builtin typings without importing the typing
module, so starting with Python 3.9, Tuple[...]
has been deprecated in favor of tuple[...]
. e.g.
def func(var: tuple[int, ...]):
pass