【问题标题】:TypeHinting tuples in PythonPython 中的类型提示元组
【发布时间】:2018-05-12 00:58:42
【问题描述】:

当我想在 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


    【解决方案1】:

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

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

    来自文档:https://docs.python.org/3/library/typing.html#typing.Tuple

    要指定同构类型的可变长度元组,请使用文字省略号,例如Tuple[int, ...]。一个普通的Tuple 等价于Tuple[Any, ...],然后又等价于tuple

    【讨论】:

    • 在不使用额外包的情况下让它成为可能会很好,但无论如何我都需要它,而且似乎没有其他选择
    • typing 在 Pyhthon 中已经是 included,所以不需要额外的包
    • 即使我传入的第一个参数的类型不是int,python也不会报错吧?
    • @WadeWang 正确。在发表评论之前,您应该在终端中尝试并立即获得反馈。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-06-06
      • 2020-01-14
      • 2022-09-29
      • 2022-12-20
      • 2016-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-25
      相关资源
      最近更新 更多