TypeHinting tuples in Python

Question:

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]):
Asked By: Asara

||

Answers:

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 plain Tuple is equivalent to Tuple[Any, ...], and in turn to tuple.

Answered By: aaron

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
Answered By: JokeNeverSoke
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.