Пусть у нас есть следующий код:Функция внутри функции - каждый раз?
def big_function():
def little_function():
.......
.........
Питон документация говорит о def
заявление:
Определение функции является исполняемым оператором. Его исполнение связывает имя функции ...
Итак, вопрос: def little_function()
выполнять ли каждый раз, когда big_function
вызывается? Вопрос о def
утверждение точно, а не little_function()
тело.
Как вы знаете, сколько накладных расходов выполняет команда байтового кода «MAKE_FUNCTION»? Похоже, что это может потребовать выделения памяти, которая обычно является медленной операцией на большинстве других языков. – martineau
@martineau Нет, нет большого выделения памяти. Операция 'MAKE_FUNCTION' просто увеличивает ссылочный код для объекта кода, его не нужно копировать. Разумеется, создается новый функциональный объект, который включает в себя выделение нового 'PyFunctionObject', но учитывая, что * каждая операция * выделяет объект python, он значительно не влияет на производительность (очевидно, что существенно зависит от остальной части кода my_function '). – Bakuriu
Отличное объяснение, спасибо! – dondublon