В какой момент в Python происходит создание экземпляра функции в памяти?
Ответ от нейросети
sobes.tech AI
Что хотят услышать интервьюеры:
Функция в Python создаётся как объект в момент выполнения инструкции def, то есть при достижении этого кода интерпретатором. При этом сам код функции не выполняется, а лишь создаётся объект-функция и связывается с именем. Если def находится внутри другой функции, новый объект функции создаётся каждый раз при выполнении внешней функции.
Определение:
В Python функция — это объект первого класса. Когда интерпретатор доходит до def, он компилирует тело функции в объект кода и создаёт объект функции, который хранит ссылку на этот код и контекст. Само выполнение тела функции начинается только при вызове.
Пример использования:
def greet():
print("Hello")
print(greet)
greet()
В этом примере:
- при выполнении
def greet(): ...создаётся объект функции; print(greet)показывает, чтоgreetуже существует как объект;greet()запускает выполнение тела функции.
Если функция объявлена внутри другой функции:
def outer():
def inner():
print("inner")
return inner
f1 = outer()
f2 = outer()
print(f1 is f2)
Здесь inner создаётся заново при каждом вызове outer().
Пояснение кода:
В первом примере:
- интерпретатор читает
def greet():; - создаёт объект функции
greet; - привязывает его к имени
greetв текущей области видимости; - при
greet()уже вызывается этот объект, и выполняетсяprint("Hello").
Во втором примере:
- при каждом вызове
outer()выполняется внутреннийdef inner():; - это создаёт новый объект функции
inner; - поэтому
f1иf2ссылаются на разные объекты, иf1 is f2будетFalse.
Ключевые моменты:
defсоздаёт объект функции в момент выполнения, а не при старте программы.- Тело функции не исполняется при
def, только при вызове. - Функция внутри другой функции создаётся заново при каждом выполнении внешней функции.
- Имя функции — это просто ссылка на объект-функцию.
- Функции в Python являются объектами и могут передаваться, возвращаться и храниться в переменных.