Функция range() — одна из базовых и наиболее часто используемых в Python. Рассказываем, как она работает, где применяется и какие операции поддерживает.
Что такое функция range() в Python и как она работает
Range() — это функция в Python, которую используют, чтобы задать последовательность целых чисел. Она нужна, когда необходимо повторить действие несколько раз или обработать набор элементов. Эта функция применяется практически везде — от социальных сетей и компьютерных игр до онлайн-банкинга.
Пример работы range():
В результате вызова функции range() мы получаем объект типа range — встроенный тип Python. Объект range не хранит в памяти весь набор чисел, а описывает последовательность с помощью параметров — начала, конца и шага. Поэтому он занимает мало памяти даже при работе с большими диапазонами.
При этом range не является генератором или итератором. Это отдельный тип последовательности, который можно перебирать, проверять с помощью оператора in, получать его длину через len(), а также использовать индексы и срезы.
Вызов функции range() с аргументами покажет параметры объекта range. А чтобы увидеть все входящие в него числа, объект можно преобразовать в список:
numbers = range(7) print(numbers) print(list(numbers))
Вывод:
range(0, 7) [0, 1, 2, 3, 4, 5, 6]
Чаще всего range() используют вместе с циклом for. Цикл последовательно перебирает числа диапазона и выполняет для каждого из них заданный код:
for i in range(5): print(i)
Вывод:
0 1 2 3 4
Синтаксис, параметры и применение range()
Функцию range() можно вызвать тремя способами:
range(stop) range(start, stop) range(start, stop, step)
Параметры, переданные в функцию, определяют начало и конец диапазона, а также расстояние между соседними числами (шаг).
- Параметр start — первое число последовательности. По умолчанию start равен 0.
- Параметр stop — граница, до которой строится последовательность.
- Параметр step — шаг между числами. По умолчанию step равен 1.
При этом значение stop в диапазон не входит. Поэтому, например, range(5) создает последовательность от 0 до 4, а не до 5.
В качестве аргументов в range() передаются целые числа. Дробные числа и строки функция не принимает.
Конечная граница stop
Если передать один аргумент, то range() использует его как конечную границу. По умолчанию начальное значение (start) будет равно 0, а шаг (step) — 1.

Вызов range(5) вернет объект как range(0, 5). Чтобы увидеть саму последовательность, преобразуем этот объект в список. Тогда получим [0, 1, 2, 3, 4].
Диапазон чисел с параметрами start и stop
Первый аргумент задает начало диапазона, второй — его конечную границу:
range(2, 5)
Получится такая последовательность:
2, 3, 4
Как задать шаг с параметром step
Третий аргумент в range() определяет шаг последовательности:
range(2, 10, 2)
Последовательность:
2, 4, 6, 8
Шаг может быть положительным или отрицательным, но не может быть равен нулю.
Например, вызов range(1, 10, 0) приведет к ошибке ValueError, потому что Python не сможет перейти к следующему числу.

Чтобы получить числа в порядке убывания, в range() указывают отрицательный шаг:
for i in range(10, 0, -2): print(i)
Здесь последовательность начинается с 10, уменьшается на 2 и заканчивается перед значением 0. Если start больше, чем stop, шаг должен быть отрицательным. При положительном шаге такой диапазон получится пустым.
Вывод:
10 8 6 4 2
Также готовый диапазон можно перебрать в обратном порядке с помощью reversed():
for i in reversed(range(1, 6)): print(i)
Вывод:
5 4 3 2 1
В этом случае range(1, 6) сначала задает последовательность от 1 до 5, а reversed() меняет порядок ее перебора.
Почему range() создает пустой диапазон
При положительном шаге последовательность должна двигаться от меньшего значения к большему. Когда начальное значение больше конечного, в диапазон ничего не попадает. Например:
for i in range(5, 3, 1): print(i)
Цикл ничего не выведет, потому что диапазон начинается с 5, но положительный шаг увеличивает значения, тогда как конечная граница 3 находится в противоположном направлении.
Как использовать range() с циклом for
Повторить действие несколько раз
Если нужно выполнить действие или блок кода фиксированное количество раз, можно использовать цикл for вместе с range():
for _ in range(3):
print("Отправляем запрос")
Символ _ используется как имя переменной, потому что значения 0, 1 и 2 внутри цикла не нужны.
Создать список чисел
- Объект range можно преобразовать в обычный список с помощью функции list():
numbers = list(range(1, 11)) print(numbers)
Вывод:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
- Если числа нужно изменить по определенному правилу, можно использовать списковое включение:
squares = [number ** 2 for number in range(1, 6)] print(squares)
Цикл перебирает числа от 1 до 5, возводит каждое в квадрат и добавляет результат в новый список.
Вывод:
[1, 4, 9, 16, 25]
Как перебрать индексы элементов
Если нужно обращаться к элементам списка по индексам, можно совместить range() с len():
fruits = ["яблоко", "груша", "слива"] for i in range(len(fruits)): print(i, fruits[i])
Функция len(fruits) возвращает количество элементов в списке — 3. Поэтому range(3) создает последовательность индексов 0, 1, 2. На каждой итерации переменная i получает очередной индекс, а выражение fruits[i] обращается к соответствующему элементу.
Вывод:
0 яблоко 1 груша 2 слива
Но когда одновременно нужны индекс и сам элемент, удобнее использовать функцию enumerate():
for i, fruit in enumerate(fruits): print(i, fruit)
Цикл выводит те же строки, но код стал проще.
Какие еще операции поддерживает объект range
Кроме цикла for, объект range поддерживает основные операции для последовательностей.
Получение длины
Функция len() возвращает количество чисел в диапазоне:
numbers = range(2, 10, 2) print(len(numbers))
Вывод:
4
Диапазон содержит четыре числа: 2, 4, 6 и 8.
Проверка наличия числа в диапазоне
С помощью оператора in можно проверить, входит ли число в диапазон:
numbers = range(0, 10, 2) print(6 in numbers) print(7 in numbers)
Вывод:
True False
Число 6 входит в последовательность четных чисел, а 7 — нет.
Обращение по индексу
Элементы объекта range доступны по индексам:
numbers = range(10, 20, 2) print(numbers[0]) print(numbers[-1])
Вывод:
10 18
Индекс 0 указывает на первый элемент, а индекс -1 — на последний.
Использование срезов
К объектам range также можно применять срезы:
numbers = range(10) part = numbers[2:7] print(part)
Срез объекта range возвращает новый объект range. Чтобы вывести все его значения, результат можно преобразовать в список:
print(list(part))
Вывод:
range(2, 7) [2, 3, 4, 5, 6]
При этом объекты range нельзя складывать и умножать с помощью операторов + и *, как обычные списки.
Можно ли передавать в range дробные числа
Функция range() предназначена для работы с целыми числами и не принимает значения типа float. Например, попытка указать дробный шаг приведет к ошибке:
range(0, 1, 0.1)
В результате получим ошибку:
TypeError: 'float' object cannot be interpreted as an integer
Создать последовательность дробных чисел можно с помощью целого счетчика, а затем преобразовать полученные значения:
values = [i / 10 for i in range(0, 11)] print(values)
Вывод:
[0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
Здесь range(0, 11) задает целые числа от 0 до 10, а деление каждого числа на 10 создает последовательность дробных значений.
При вычислениях с типом float иногда возникают погрешности из-за особенностей хранения вещественных чисел в памяти. Поэтому результат некоторых операций может незначительно отличаться от ожидаемого значения.
Функция range() в Python: коротко о главном
- Функция range() задает неизменяемую последовательность целых чисел.
- Функцию можно вызвать как range(stop), range(start, stop) или range(start, stop, step).
- Параметр start по умолчанию равен 0, а step равен 1.
- Конечная граница stop не входит в последовательность.
- Шаг может быть положительным или отрицательным, но не может быть равен нулю.
- Если направление шага не соответствует границам, объект range представляет пустую последовательность.
- Чаще всего range() используют с циклом for, но объект также поддерживает len(), оператор in, индексы и срезы.
- Объект range можно преобразовать в список с помощью list().
- Функция range() не принимает дробные числа, включая дробное значение шага.
