Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Python: generator, iterator, Python, type checking, collections.abc

Как определить, является ли объект генератором или итератором?

Вопрос проверяет понимание различий между итераторами и генераторами в Python, а также умение использовать встроенные функции для их идентификации.

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

Итератор — это объект с методами __iter__() и __next__(). Генератор — это функция с yield, возвращающая объект-генератор, который сам является итератором. Чтобы проверить, является ли объект итератором, используйте isinstance(obj, collections.abc.Iterator). Для проверки на генератор используйте inspect.isgenerator(obj) или isinstance(obj, types.GeneratorType).

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

Определение итератора и генератора

Итератор в Python — это объект, который реализует протокол итерации: методы __iter__() (возвращает себя) и __next__() (возвращает следующий элемент или выбрасывает StopIteration). Генератор — это особый вид итератора, создаваемый с помощью функции, содержащей ключевое слово yield. Каждый вызов такой функции возвращает объект-генератор.

Как проверить тип

Для проверки, является ли объект итератором, используйте абстрактный базовый класс из модуля collections.abc:

from collections.abc import Iterator

def is_iterator(obj):
    return isinstance(obj, Iterator)

# Пример
my_list = [1, 2, 3]
list_iter = iter(my_list)
print(is_iterator(list_iter))  # True
print(is_iterator(my_list))    # False

Для проверки на генератор можно использовать модуль inspect или types:

import inspect
import types

def my_gen():
    yield 1

gen = my_gen()
print(inspect.isgenerator(gen))          # True
print(isinstance(gen, types.GeneratorType))  # True

Практическое применение

Эти проверки полезны при написании функций, которые принимают итерируемые объекты и должны обрабатывать их по-разному в зависимости от типа. Например, генераторы можно использовать для ленивых вычислений, а обычные итераторы — для работы с уже существующими данными.

Вывод: используйте isinstance(obj, Iterator) для проверки на итератор и inspect.isgenerator(obj) для проверки на генератор. Это помогает писать более гибкий и безопасный код, особенно при работе с большими потоками данных.

  • Аватар

    Python Guru

    Sergey Filichkin

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

Уровень

  • Рейтинг:

    3

  • Сложность:

    4

Навыки

  • Python

    Python

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

#generator

#iterator

#Python

#type checking

#collections.abc

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

  • Аватар

    Python Guru

    Sergey Filichkin

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