weranda
@weranda

На каком моменте функция срабатывает?

Приветствую
Простой пример:
def do_it(a, b):
    return a + b
x = do_it(2, 2)
print(x)

На каком моменте происходит вызов функции?
1) при присваивании объекта x: (x = do_it(2, 2))
2) при выводе x: (print(x))
К моменту вывода x, 2 + 2 уже сложено, посчитано и результировано или же нет?
Поясните пожалуйста.
  • Вопрос задан
  • 94 просмотра
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Можно же посмотреть байткод
2           0 LOAD_FAST                0 (a)
            2 LOAD_FAST                1 (b)
            4 BINARY_ADD                        <-- Сложение a и b
            6 RETURN_VALUE                      <-- Возврат результата

2           0 LOAD_CONST               1 (<code object do_it at 0x0000000004E59F60)
            2 LOAD_CONST               2 ('<globals>.do_it')
            4 MAKE_FUNCTION            0
            6 STORE_FAST               0 (do_it)

4           8 LOAD_FAST                0 (do_it)
           10 LOAD_CONST               3 (2)
           12 LOAD_CONST               3 (2)
           14 CALL_FUNCTION            2        <-- Вызов do_it
           16 STORE_FAST               1 (x)    <-- Присваивание x значения 4

5          18 LOAD_GLOBAL              0 (print)
           20 LOAD_FAST                1 (x)
           22 CALL_FUNCTION            1        <-- Вызов print

Сначала функция do_it вызывается, а потом возвращённое из неё значение присваивается переменной x
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы