您可以使用以下装饰器:
def lazy_fn(fn):
return lambda *args: lambda: fn(*args)
(也可以表示为
lazy_fn = lambda fn: lambda *args: lambda: fn(*args)
如果你喜欢羊肉。)
像这样使用:
@lazy_fn
def expensive_call(x):
print(x)
if x == "d":
return x
@lazy_fn
def expensive_call_2(x, y):
print(x)
print(y)
return x + y
a = [expensive_call("a"), expensive_call_2("b", "c"), expensive_call("d")]
print(next((e for e in map(lambda i: i(), a) if e is not None), 'All are Nones'))
输出:
a
b
c
bc
注意不要使用
for e in a
,您需要使用
for e in map(lambda i: i(), a)
是的。