Выбор ответа Junior Память и производительность обновлено
Встроенные функции против ручного цикла
Вопрос
Почему sum(nums) обычно быстрее ручного цикла for x in nums: total += x?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: sum написана на C и не крутит байткод на каждой итерации. Цикл на Python на каждой итерации исполняет несколько байткод-инструкций, а встроенная функция крутит цикл внутри C.
Варианты ответа
sumнаписана на C и не крутит байткод на каждой итерацииправильный ответsumсчитает параллельно на всех ядрах процессораsumкеширует результат для одного и того же списка- Ручной цикл копирует список перед обходом
Разбор
Цикл на Python на каждой итерации исполняет несколько байткод-инструкций, а встроенная функция крутит цикл внутри C. Параллельности, кеширования и копий здесь нет. Поэтому правило: где можно, использовать встроенные функции, str.join, comprehension, модули itertools и collections.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «Память и производительность»
- Числа Фибоначчи без экспоненты
- Скользящая медиана потока на двух кучах
- Найти пару с суммой быстрее O(n²)
- Циклические ссылки и gc
- Управление памятью в CPython
- Инструменты профилирования Python
- Почему Python медленнее C
- gc.freeze в форкающихся воркерах