Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+694новые вакансии за сутки·52 494вакансии открыты сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 662
РезюмеAIПодготовкаСтатьи
ТарифыТарифы
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 391 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python6 244
  • Облачные технологии4 749
  • QA вакансии1 736
  • Android1 148
  • Инженер данных800
  • Продакт-менеджер321

Разработка

  • iOS1 092
  • Backend вакансии1 046
  • Fullstack вакансии453
  • AI вакансии391
  • Frontend вакансии376
  • Mobile вакансии27

По стеку

  • Go3 590
  • Java2 153
  • Kotlin942
  • Node.js767
  • Rust544
  • .NET496
  • PHP267
  • C++220
  • C#198

DevOps и инфраструктура

  • Kubernetes2 686
  • Linux-инфраструктура2 117
  • DevOps вакансии1 960
  • Terraform / IaC1 615
  • CI/CD871
  • Мониторинг и Observability742
  • SRE228
  • Кибербезопасность47

Аналитика и данные

  • Аналитик данных495
  • Data Scientist449
  • Бизнес-аналитик351
  • Системный аналитик54

Другие направления

  • Проджект-менеджер109
  • UI/UX дизайн70
  • Ручное тестирование14

По регионам

  • Вакансии в США23 835
  • Вакансии в Европе9 341
  • Работа в России3 283
  • Вакансии в Канаде2 140

По формату

  • Удалённые вакансии41 311
  • Релокация в США23 835
  • Гибридная работа4 058
  • Офисная работа2 949

По уровню

  • Senior вакансии20 396
  • Middle вакансии11 620
  • Junior вакансии3 665

Сейчас нанимают

Все компании
  • Rakuten188 вакансий
  • ASML163 вакансии
  • Wise139 вакансий
  • Grab134 вакансии
  • Infobip28 вакансий
  • Adyen23 вакансии
  • Darktrace17 вакансий
  • Spotify15 вакансий
  • Celonis11 вакансий
  • Razorpay9 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме PythonВсе вопросы
PythonJuniorLive-кодинг

Что такое __iter__ и __next__?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

__iter__(self) возвращает iterator (часто self, если объект — сам iterator). __next__(self) возвращает следующий элемент или поднимает StopIteration. Это iterator protocol, на котором работают for, list(), sum(), zip, enumerate.

Контракт iterator protocol

class MyIterator:
    def __iter__(self):
        return self                  # iterator возвращает себя

    def __next__(self):
        if no_more_items:
            raise StopIteration       # сигнал конца — обязателен
        return next_item

Два главных потребителя — встроенные функции iter(obj) и next(it[, default]). for внутри использует именно их.

Минимальный пример

class CountDown:
    def __init__(self, start):
        self.current = start

    def __iter__(self):
        return self

    def __next__(self):
        if self.current <= 0:
            raise StopIteration
        value = self.current
        self.current -= 1
        return value

print(list(CountDown(3)))    # [3, 2, 1]

# Можно использовать и через next() с дефолтом
it = CountDown(2)
print(next(it))              # 2
print(next(it))              # 1
print(next(it, None))        # None — нет StopIteration наружу

Раздельный iterable и iterator

Если хочется многократного прохода, отделите коллекцию от итератора:

class Range:
    def __init__(self, n):
        self.n = n

    def __iter__(self):
        return RangeIterator(self.n)

class RangeIterator:
    def __init__(self, n):
        self.i = 0
        self.n = n
    def __iter__(self):
        return self
    def __next__(self):
        if self.i >= self.n:
            raise StopIteration
        v = self.i
        self.i += 1
        return v

r = Range(3)
print(list(r), list(r))      # [0, 1, 2] [0, 1, 2]

Sentinel-форма iter()

Малоизвестная фишка: iter(callable, sentinel) вызывает callable до тех пор, пока не вернётся sentinel.

import sys
# Читаем stdin по строке до пустой
for line in iter(sys.stdin.readline, ""):
    print(line, end="")

__iter__ только с __getitem__

Старый sequence-protocol: если у класса есть __getitem__(0), __getitem__(1), ... до IndexError, объект всё равно итерируется. __iter__ в этом случае необязателен, но рекомендован.

Подводные камни

  • Забыли raise StopIteration — for зациклится.
  • __next__ вернул None вместо StopIteration — конец потока не распознан, for выдаст None и продолжит.
  • __iter__ возвращает не итератор, а сам объект, у которого нет __next__ — TypeError: iter() returned non-iterator.
  • Iterator с __iter__, возвращающим новый iterator каждый раз, теряет состояние.
  • В Python 3.7+ исключение StopIteration, поднятое внутри generator function, превращается в RuntimeError (PEP 479).
  • Стандарт: __next__ в Python 3 (раньше был next() в Python 2 без подчёркиваний).

Частые вопросы на собеседовании

  • Что такое truthy и falsy значения в Python?
  • Когда использовать threading?
  • Что такое type hints и зачем они нужны?
  • Как работает yield?

Типичные ошибки

  • Не знать, кто вызывает next.
  • Забывать raise StopIteration.
  • Возвращать новый iterator из next.

Что проверяет интервьюер

  • Может реализовать простой iterator.
  • Объясняет StopIteration.
  • Понимает отличие коллекции от состояния прохода.

Как вы знаете этот вопрос?

Проверить себя по теме Python →

Источники

  • https://docs.python.org/3/reference/datamodel.html
  • https://docs.python.org/3/library/stdtypes.html
←Предыдущий вопросЧто такое *args и **kwargs? Как работает распаковка аргументов при вызове функции?Следующий вопрос→Что такое ASGI?

Связанные темы

PythonIterationProtocols