我需要循环一个返回" Success / 0"或"失败/ 1"。
我有功能列表
cmd_list = [a(x, y , z), b(e, f, g)]
我迭代思考
for cmd in cmd_list:
if cmd:
break
函数在序列中按预期运行,但是,任何返回False / 1的函数似乎都没有打破循环。
答案 0 :(得分:2)
如果出现问题而停止,而不必在每个步骤后检查错误,通常的技术是使用异常。如果失败,请使所有函数出现错误,例如
class CommandError(Exception): pass
然后简单地逐个调用它们,在块之后捕获异常:
try:
a(x, y , z)
b(e, f, g)
except CommandError as e:
# error handling
else:
# successfully finished
答案 1 :(得分:1)
你想要这个吗?:
cmd_list = [lambda: a(x,y), lambda: b(),...]
for cmd in cmd_list:
if cmd():
break
答案 2 :(得分:1)
如果您希望在迭代之前延迟执行这些功能,可以使用functools.partial
:
from functools import partial
cmd_list = [partial(a, x, y, z), partial(b, e, f, g)]
for func in cmd_list:
if func():
break
partial(f, a, b, c)
将创建一个类似于函数的新对象,在调用时,将返回使用参数f
调用的函数a, b, c
的结果。
这与你打破循环的问题无关:我很确定你的一个函数根本不会返回你的想法。
答案 3 :(得分:0)
在Python中,测试1为真,0为假。您应该更改函数以返回1表示成功,0表示失败。