首页 > 解决方案 > 可以使用 * 运算符解包的对象的正确类型注释?

问题描述

应该使用*运算符解包的对象的正确类型注释是什么,即foo在这个(随机)示例中:

def some_function(foo):
    ... = bar(*foo)

我知道它*可以解包元组和列表,但它是否仅限于这两个类,或者它是否有任何类型的接口可以使其可用于其他集合?

标签: pythontypesmypy

解决方案


Python 解包任何可迭代对象(如 a liststring 、tupledictionary 等)。因此,您可以使用 an Iterable,例如:

from typing import Iterable

def some_function(foo : Iterable):
    bar(*foo)

如果解包的项目应该是特定类型,您可以在方括号之间指定,例如:

# given the items that are unpacked should all be ints

from typing import Iterable

def some_function(foo : Iterable[int]):
    bar(*foo)

推荐阅读