> Что такое range в Python и как он используется в качестве аргумента? (Python)

Уровень: junior · Роль: backend · Категория: Технические вопросы

Компании: Сбер

Стек: Python

> Пример ответа

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

range - это встроенная функция в Python, которая возвращает неизменяемую последовательность чисел. Она часто используется в циклах for для повторения действий заданное количество раз. В качестве аргумента range принимает от одного до трёх целых чисел: stop, либо start и stop, либо start, stop и step. Результат - объект range, который экономит память, так как не хранит все числа сразу.

Подробное объяснение

range создаёт арифметическую прогрессию целых чисел. Основные формы вызова:

  • range(stop) - генерирует числа от 0 до stop - 1.
  • range(start, stop) - от start до stop - 1.
  • range(start, stop, step) - с шагом step (может быть отрицательным).

Объект range ведёт себя как последовательность: поддерживает индексацию, срезы, проверку вхождения (in), а также может быть преобразован в список через list(). При этом сам объект хранит только параметры (start, stop, step) и вычисляет элементы лениво при итерации. Это делает его эффективным для больших диапазонов.

В качестве аргумента range часто передаётся в функции, которые ожидают итерируемый объект, например sum(), max(), min(), или используется для создания списков через list(range(...)). Также он применяется для индексации коллекций, когда нужно пройтись по индексам.

На практике

На практике range используется в трёх основных сценариях:

  1. Повторение действий N раз - самый частый случай в циклах.
  2. Итерация по индексам списка - когда нужен доступ к элементу по позиции.
  3. Генерация последовательностей чисел - например, для создания списка чётных чисел или обратного порядка.

Важно помнить, что range не включает stop в результат. Если нужен включительный диапазон, добавляют +1 к stop. Также при отрицательном step нужно следить, чтобы start был больше stop, иначе последовательность будет пустой.

Пример кода

PYTHON
# Базовые варианты
print(list(range(5))) # [0, 1, 2, 3, 4]
print(list(range(2, 7))) # [2, 3, 4, 5, 6]
print(list(range(0, 10, 2))) # [0, 2, 4, 6, 8]
print(list(range(5, 0, -1))) # [5, 4, 3, 2, 1]
# Использование в цикле
for i in range(3):
print(f"Итерация {i}")
# Передача как аргумент
numbers = list(range(1, 6))
total = sum(range(1, 101)) # сумма от 1 до 100
max_value = max(range(10, 0, -1)) # 10
# Индексация списка
fruits = ["apple", "banana", "cherry"]
for idx in range(len(fruits)):
print(idx, fruits[idx])

Как отвечать на собеседовании

Начни с краткого определения: range - функция для генерации последовательности чисел. Затем перечисли три формы вызова и объясни, что stop не включается. Упомяни ленивость вычислений и экономию памяти. Приведи пример использования в цикле for и как аргумент для list(). Если спросят про Python 2, отметь, что там был xrange, а в Python 3 range работает как xrange. Не углубляйся в детали реализации, если не просят.

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

Интервьюер проверяет базовое понимание синтаксиса и семантики range: знание параметров, поведение с отрицательным шагом, отличие от списка. Также оценивается понимание ленивых вычислений и умение применять range в практических задачах - например, для обхода индексов. Важно показать, что ты знаешь про range как итерируемый объект, а не просто функцию.

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

  • Забывают, что stop не включается, и ожидают число stop в результате.
  • Путают порядок аргументов: range(start, stop, step) - шаг всегда третий.
  • Используют range с нецелыми числами - это вызывает TypeError.
  • Пытаются использовать range с отрицательным шагом без указания start больше stop.
  • Думают, что range возвращает список - на самом деле это отдельный тип range.
  • Используют range(len(list)) там, где можно итерироваться напрямую по элементам, что считается менее идиоматичным.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью