Python 中的类型提示元组

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

当我想在 Python 中输入元组时,例如:

def func(var: tuple[int, int]):
    # do something

func((1, 2))    # would be fine
func((1, 2, 3)) # would throw an error

需要给出元组中项目的确切数量。这与列表类型提示不同:

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

从某种程度上来说,这是由于元组的类型造成的。因为它们被设计为不可更改,所以您必须对其中的项目数量进行硬编码。

所以我的问题是,有没有办法让元组类型提示中的项目数量变得灵活?我尝试了类似的方法,但没有成功:

def func(var: tuple[*int]):
python type-hinting
2个回答
186
投票

是的,您可以使元组类型提示中的项目数量变得灵活

从 Python 3.9 及以上版本开始,您可以执行以下操作:

def func(var: tuple[int, ...]):
    pass

在 Python 3.9 之前你会这样做:

from typing import Tuple

def func(var: Tuple[int, ...]):
    pass

来自文档:https://docs.python.org/3/library/stdtypes.html#tuple

要指定同类类型的可变长度元组,请使用文字省略号,例如

tuple[int, ...]
。普通的
tuple
相当于
tuple[Any, ...]
,又相当于
tuple


64
投票

PEP 585 开始,可以在不导入

typing
模块的情况下使用内置类型,因此从 Python 3.9 开始,
Tuple[...]
已被弃用,取而代之的是
tuple[...]
。例如

def func(var: tuple[int, ...]):
    pass
© www.soinside.com 2019 - 2024. All rights reserved.