假设有一种函数返回一些值或None,我们有三个这样的函数:egg、ham和spam。
目标是调用egg、ham、spam并返回返回的第一个非无值,如果没有有效值返回,则返回None。
最直接的办法是:
def func():
ret = egg()
if ret:
return ret
ret = ham()
if ret:
return ret
ret = spam()
if ret:
return ret
return None或者,一个更聪明但可能更难理解的解决方案是:
def func():
return egg() or ham() or spam()以下是我的问题(可能需要调用三个以上的候选函数):
发布于 2018-03-07 13:36:56
由于这一要求非常类似于内置的any(),所以我将编写:
def anyval(iterable):
r = None
for r in iterable:
if callable(r):
r = r()
if r != None:
break
return r
def foo():
return None
def bar():
return 0
def baz(x):
return x * 3.14
print(anyval([None,foo,bar]))
print(anyval([None,lambda: baz(3.14)]))发布于 2018-03-07 14:56:24
类似于:
def sifter():
funcs = [eggs, ham, spam]
result = None
while funcs and result is None:
result = funcs.pop(0)()
return result一个小小的解释:假设所有要运行的函数都不接受参数,那么while funcs and result is None位可以确保有更多的函数可以尝试,而当前的结果仍然是零。在while循环中,我们:
funcs.pop(0)列表中弹出第一项。(功能的列表就会松开这个函数)()result =为下一个循环做好准备,通过while语句。
https://stackoverflow.com/questions/49145235
复制相似问题