有什么方法可以钩住一个函数,使其参数的评估变得懒惰

问题描述 投票:0回答:1

请看下面的代码示例,是否有办法钩住函数 "f"(可以用一些装饰器来做),这样当flag为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
python python-decorators
1个回答
3
投票

参数总是在调用函数之前被评估。

解决方法是传递一个函数的引用,然后在其他函数中调用它。

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

f(true, f1)
f(false, f1)
© www.soinside.com 2019 - 2024. All rights reserved.