gpt4 book ai didi

python - 遍历函数列表时首先不是没有响应

转载 作者:行者123 更新时间:2023-11-28 22:32:19 24 4
gpt4 key购买 nike

我有一个函数列表,每个函数都可以返回 None 或一个有效值。我想获取第一个 not None 响应的结果:

funcs = (lambda: None, lambda: None, lambda: True)
result = next((f() for f in funcs if f()), None) # result = True

这行得通,但我不喜欢我必须执行该函数两次才能执行测试并生成结果。有没有办法只执行一次f()并保持解决方案?

附言。我知道我可以在 for 或传统循环中执行此操作(目前的代码就是这样),我正在寻找一个不错的单行代码:)

最佳答案

使用 filter() function在迭代时删除任何虚假结果(包括 None):

try:
# Forward compatibility for Python 2
from future_builtins import filter
except ImportError:
pass

result = next(filter(None, (f() for f in funcs)), None)

为了确保您在 Python 2 中也使用 iterator 版本的 filter() 我使用了 filter function from the future_builtins module .

只是一个演示,表明这不会执行比需要更多的功能:

>>> import sys
>>> from future_builtins import filter
>>> sys.version_info
sys.version_info(major=2, minor=7, micro=12, releaselevel='final', serial=0)
>>> funcs = (lambda: None, lambda: None, lambda: True, lambda: 1/0) # last one throws an exception!
>>> next(filter(None, (f() for f in funcs)), None)
True

关于python - 遍历函数列表时首先不是没有响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41107900/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com