请看下面的代码示例,是否有办法钩住函数 "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
参数总是在调用函数之前被评估。
解决方法是传递一个函数的引用,然后在其他函数中调用它。
def f(flag, a):
if flag:
print(a())
f(true, f1)
f(false, f1)