Какую аннотацию подходящего типа для объекта, который должен быть распакован оператором *
, т.е. foo
в этом (случайном) примере:
def some_function(foo):
... = bar(*foo)
Я знаю, что *
может распаковать кортежи и списки, но ограничивается ли этими двумя классами или имеет какой-либо интерфейс, который бы мог использовать его для других коллекций?
Python распаковывает любой итерацию (так list
, str
Инг, tuple
, dict
ionary и т.д.). Таким образом, вы можете использовать для этого 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)
typing.Iterable
поверх collections.abc.Iterable
если вы не хотите указывать содержимое (например, Iterable[int]
) итерируемого?
typing
больше, так как это предназначено для подписи типов.
typing.Iterable
Достаточно ли?