请参见下面的代码示例,是否有任何方法可以挂接函数“ 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
答案 0 :(得分:3)
在调用函数之前,总是对参数求值。
解决方案是传递对该函数的引用,然后在另一个函数内部调用它。
def f(flag, a):
if flag:
print(a())
f(true, f1)
f(false, f1)