Выбор ответа Junior Память и производительность обновлено

Встроенные функции против ручного цикла

Вопрос

Почему sum(nums) обычно быстрее ручного цикла for x in nums: total += x?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: sum написана на C и не крутит байткод на каждой итерации. Цикл на Python на каждой итерации исполняет несколько байткод-инструкций, а встроенная функция крутит цикл внутри C.

Варианты ответа

  1. sum написана на C и не крутит байткод на каждой итерацииправильный ответ
  2. sum считает параллельно на всех ядрах процессора
  3. sum кеширует результат для одного и того же списка
  4. Ручной цикл копирует список перед обходом

Разбор

Цикл на Python на каждой итерации исполняет несколько байткод-инструкций, а встроенная функция крутит цикл внутри C. Параллельности, кеширования и копий здесь нет. Поэтому правило: где можно, использовать встроенные функции, str.join, comprehension, модули itertools и collections.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.