Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про TypeScript: Python, type hints, Sequence, Iterable, typing

Чем Sequence отличается от Iterable в аннотациях типов?

Проверяет понимание различий между абстрактными типами Sequence и Iterable в системе аннотаций типов Python.

Короткий ответ

Iterable — это самый общий тип для объектов, по которым можно итерироваться (например, с помощью цикла for). Sequence — это подтип Iterable, который дополнительно поддерживает доступ по индексу и имеет фиксированную длину. Iterable включает в себя генераторы, множества и файлы, а Sequence — списки, кортежи и строки. Использование Sequence в аннотации гарантирует, что переданный объект можно не только перебрать, но и получить элемент по индексу.

Длинный ответ

Разница между Sequence и Iterable в аннотациях типов Python

В системе типов Python (модуль typing) Iterable и Sequence представляют разные уровни абстракции для коллекций. Iterable — это самый общий контракт: объект, реализующий протокол итерации (метод __iter__() или __getitem__() с последовательными индексами). Sequence — это более строгий контракт, наследующий от Iterable, Reversible и Collection, который гарантирует поддержку доступа по индексу (__getitem__ с произвольным целым индексом), определение длины (__len__) и возможность обратной итерации.

Ключевые различия

  • Iterable: можно использовать в цикле for, передавать в функции, ожидающие итератор. Примеры: списки, кортежи, строки, множества, словари, генераторы, файлы.
  • Sequence: всё, что есть у Iterable, плюс доступ по индексу (например, my_list[0]), срезы, методы .count() и .index(). Примеры: list, tuple, str, range, bytes, bytearray.

Пример кода

from typing import Iterable, Sequence

def process_iterable(data: Iterable[int]) -> None:
    for item in data:
        print(item)

def process_sequence(data: Sequence[int]) -> None:
    # Можем обратиться по индексу
    first = data[0]
    print(f"First element: {first}")
    # Можем получить длину
    print(f"Length: {len(data)}")

# Примеры вызовов
process_iterable([1, 2, 3])  # OK
process_iterable((x for x in range(3)))  # OK, генератор
process_sequence([1, 2, 3])  # OK
process_sequence((1, 2, 3))  # OK, кортеж
# process_sequence((x for x in range(3)))  # Ошибка типов: генератор не Sequence

Когда что использовать

Используйте Iterable, если ваша функция только перебирает элементы и не требует доступа по индексу или длины. Это делает функцию более гибкой — она сможет принимать генераторы и другие ленивые последовательности. Используйте Sequence, когда вам нужен доступ по индексу, срезы или гарантия, что данные можно перебрать несколько раз (генераторы можно перебрать только один раз).

Вывод: Sequence — это более строгий и богатый тип, чем Iterable. Выбор между ними зависит от того, какие операции над коллекцией вы планируете выполнять. Для максимальной гибкости используйте Iterable, для гарантии доступа по индексу — Sequence.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    4

Навыки

  • TypeScript

    TypeScript

Ключевые слова

#Python

#type hints

#Sequence

#Iterable

#typing

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.