Чем `range(3)` отличается от `range(0, 3)`?

Фактически, 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)) может повысить читаемость кода, особенно если это соответствует логике задачи.

0