Что такое range() в Python?
Range — это встроенная функция (built-in function) языка программирования Python, которая возвращает специальный объект — range object, представляющий собой неизменяемую (immutable) последовательность чисел. Этот объект не хранит все числа в памяти одновременно, а генерирует их «на лету» по мере необходимости, что делает его очень эффективным при работе с большими диапазонами.
Основное предназначение range() — создание последовательности целых чисел для итерации в циклах, прежде всего в цикле for.
Синтаксис и параметры функции range()
Функция range() может принимать от одного до трёх аргументов:
1. range(stop)
Создаёт последовательность чисел от 0 до stop - 1 с шагом 1.
Пример:
for i in range(5):
print(i)
# Вывод: 0, 1, 2, 3, 4
2. range(start, stop)
Создаёт последовательность чисел от start до stop - 1 с шагом 1.
Пример:
for i in range(2, 7):
print(i)
# Вывод: 2, 3, 4, 5, 6
3. range(start, stop, step)
Создаёт последовательность чисел от start до stop - 1 с заданным шагом step. Шаг может быть как положительным, так и отрицательным.
Примеры:
# С положительным шагом
for i in range(0, 10, 2):
print(i)
# Вывод: 0, 2, 4, 6, 8
# С отрицательным шагом (обратный порядок)
for i in range(5, 0, -1):
print(i)
# Вывод: 5, 4, 3, 2, 1
Основные особенности и поведение
- «Ленивые» вычисления:
range()не создаёт список сразу. Она возвращает объект-генератор, который выдаёт следующее число только когда это требуется. Это экономит память. - Индексация и срезы: К объекту
rangeможно применять индексацию, как к списку:r = range(10); print(r[5]) # 5. Также поддерживаются срезы, которые возвращают новый объектrange. - Неизменяемость: Последовательность, создаваемая
range(), неизменяема. Нельзя изменить её элементы по индексу. - Проверка вхождения: С помощью оператора
inможно проверить, входит ли число в последовательность:5 in range(10) # True.
Практическое применение range()
Использование в цикле for
Это классический и самый частый сценарий:
# Повторить действие 3 раза
for _ in range(3):
print("Привет, мир!")
# Перебор индексов списка
fruits = ['яблоко', 'банан', 'вишня']
for i in range(len(fruits)):
print(f"Индекс {i}: {fruits[i]}")
Создание списков (list) и кортежей (tuple)
Хотя range сам по себе не является списком, его легко преобразовать:
# Создание списка чисел
numbers_list = list(range(1, 6)) # [1, 2, 3, 4, 5]
# Создание кортежа
numbers_tuple = tuple(range(0, 10, 2)) # (0, 2, 4, 6, 8)
Итерация в обратном порядке
Используя отрицательный шаг, можно легко организовать обратный перебор:
for i in range(10, 0, -1):
print(f"Обратный отсчёт: {i}")
print("Старт!")
Отличие range() от xrange() (Python 2) и аналоги в Python 3
В Python 2 существовали две функции: range(), которая возвращала список, и xrange(), которая возвращала генератор. В Python 3 функция range() ведёт себя как xrange() из Python 2 (ленивый генератор), а старая реализация range() (создающая список) была удалена. Функция xrange() в Python 3 отсутствует.
Распространённые ошибки и подводные камни
- Пустой диапазон: Если
start>=stopпри положительном шаге (илиstart<=stopпри отрицательном), range создаст пустую последовательность. Цикл не выполнится ни разу.for i in range(5, 2): # start > stop при step=1 print(i) # Этот код никогда не выполнится - Шаг, равный нулю: Вызов
range(1, 5, 0)вызовет ошибкуValueError, так как шаг не может быть равен нулю. - Дробные числа: Функция
range()работает только с целыми числами (типint). Для последовательностей дробных чисел используйтеnumpy.arange()или генерацию списка с помощью цикла.
Заключение
Range — это фундаментальный и оптимизированный инструмент Python для работы с последовательностями целых чисел. Его понимание критически важно для написания эффективных и читаемых циклов. Запомните простое правило: range(start, stop, step) генерирует числа от start включительно до stop исключительно с заданным шагом. Использование range() вместо создания списков вручную — это хорошая практика, которая помогает экономить ресурсы памяти, особенно при работе с большими данными.
Комментарии
—Войдите, чтобы оставить комментарий