Sobes.tech
Назад к вопросам
Junior — Middle
56

В какой момент в 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 являются объектами и могут передаваться, возвращаться и храниться в переменных.