range(3)
и range(0, 3)
эквивалентны. В обоих случаях создается последовательность чисел от 0 до 2 (не включая 3). Второй вариант просто явно указывает начальное значение 0, которое является значением по умолчанию для функции range()
.
На собеседовании на позицию Python-разработчика, вопрос о различиях между range(3)
и range(0, 3)
направлен на проверку понимания работы функции range()
и ее аргументов по умолчанию.
Фактически, никакой разницы между range(3)
и range(0, 3)
нет. Обе эти конструкции создают объект range
, который представляет последовательность чисел, начинающуюся с 0 и заканчивающуюся непосредственно перед 3.
range()
принимает от одного до трех аргументов:
stop
(обязательный): Число, до которого (исключительно) генерируется последовательность. Если указан только один аргумент, он интерпретируется как stop
, а значение start
по умолчанию равно 0, а значение step
по умолчанию равно 1.start
(необязательный): Число, с которого начинается последовательность. Если не указан, по умолчанию равно 0.step
(необязательный): Шаг между числами в последовательности. Если не указан, по умолчанию равен 1.Таким образом, range(3)
неявно использует значения по умолчанию для start
(0) и step
(1), что эквивалентно range(0, 3, 1)
. range(0, 3)
явно указывает начало последовательности как 0, используя значение по умолчанию для step
(1), что также эквивалентно range(0, 3, 1)
.
В итоге, оба варианта создают одинаковый объект range(0, 3)
, который при итерации выдаст значения 0, 1 и 2. Оба выражения идентичны по функциональности и производительности.
Пример:
for i in range(3):
print(i) # Выводит: 0, 1, 2
for i in range(0, 3):
print(i) # Выводит: 0, 1, 2
Хотя разницы в поведении нет, явное указание start
(например, range(0, 3)
) может повысить читаемость кода, особенно если это соответствует логике задачи.