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

+1 318новых вакансий за сутки·66 464вакансии открыты сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python14 441
  • Облачные технологии10 338
  • QA вакансии3 210
  • Android1 700
  • Инженер данных1 129
  • Продакт-менеджер381

Разработка

  • Backend вакансии1 601
  • iOS1 573
  • AI вакансии776
  • Fullstack вакансии658
  • Frontend вакансии548
  • Mobile вакансии28

По стеку

  • Go7 890
  • Java5 126
  • Node.js1 605
  • Kotlin1 382
  • Rust1 310
  • .NET1 243
  • PHP535
  • C++382
  • C#353

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

  • Kubernetes5 943
  • Linux-инфраструктура4 578
  • DevOps вакансии4 419
  • Terraform / IaC3 306
  • Мониторинг и Observability1 547
  • CI/CD1 465
  • SRE428
  • Кибербезопасность46

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

  • Аналитик данных638
  • Бизнес-аналитик576
  • Data Scientist512
  • Системный аналитик84

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

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

По регионам

  • Вакансии в США32 231
  • Вакансии в Европе12 899
  • Работа в России3 682
  • Вакансии в Канаде2 743

По формату

  • Удалённые вакансии48 631
  • Релокация в США32 231
  • Гибридная работа8 726
  • Офисная работа6 524

По уровню

  • Senior вакансии29 196
  • Middle вакансии12 901
  • Junior вакансии4 717

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

Все компании
  • Wise191 вакансия
  • Rakuten189 вакансий
  • ASML164 вакансии
  • Grab134 вакансии
  • Celonis45 вакансий
  • Spotify37 вакансий
  • Infobip28 вакансий
  • Adyen27 вакансий
  • Monzo19 вакансий
  • Darktrace17 вакансий

Вакансии из 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