Есть ли способ подключить функцию, чтобы вычисление ее параметров было ленивым - PullRequest
0 голосов
/ 28 мая 2020

См. Следующий пример кода, есть ли способ перехватить функцию «f» (может сделать это с помощью какого-нибудь декоратора), чтобы, когда флаг установлен в false, оценка параметра «a» не происходила (функция «f1» не вызывается)

def f(flag, a):
    if flag:
        print(a)
    else:
        return
def f1():
    print('f1')
    return 'f1'

f(true,  f1()) #print f1 twice

f(false, f1()) #not print f1

1 Ответ

3 голосов
/ 28 мая 2020

Аргументы всегда оцениваются перед вызовом функции.

Решение состоит в том, чтобы передать ссылку на функцию и вызвать ее внутри другой функции.

def f(flag, a):
    if flag:
        print(a())

f(true, f1)
f(false, f1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...