当var变为False时,我遇到需要退出代码块的问题。 例如
...
var = True
var, msg = somefunction1(x)
var, msg = somefunction2(y)
var, msg = somefunction3(z)
...
somefunction *可以返回True或False。当var变为False时,有没有办法在每行之后添加if语句来退出此块?
P.S。有很多功能,它们的名称不同。
答案 0 :(得分:3)
我不得不猜一点,因为我在你的例子中缺少一些上下文,但你可以使用一个函数列表和一个循环? (这仍然涉及一个if,因为替代方案更加混乱)
functions = [somefunction1, somefunction2, somefunction3]
for func in functions:
var, msg = func()
if not var:
break
那样的东西?
但我的意思是,如果你真的讨厌陈述:
functions = [somefunction1, somefunction2, somefunction3]
i = 0
var = True
while var and i < len(functions):
var, msg = func()
i += 1
基于更新,并且不愿意将函数直接写入列表,您可以(但不应该 - 严重地,只列出函数)执行类似这样的操作(这假设所有函数都使用没有参数,如果不是,则将argcount检查更改为预期的参数:
functions = [x for x in globals().values()
if hasattr(x, '__call__') and
hasattr(x, "__code__") and
x.__code__.co_argcount == 0]
for func in functions:
try:
var, msg = func()
except (ValueError, TypeError):
continue
if not isinstance(var, bool) or not isinstance(msg, str):
continue
if not var:
break
你可以重写第一行,但我还没有确定哪个版本的攻击性/安全性较低:
functions = [x for x in globals()["functions"]
if x.__code__.co_argcount == 0]
但要重申 - 只因为你能做到这一点,并不意味着你应该这样做。我的意思是看它,它是一种可憎的。
答案 1 :(得分:1)
这样的事情可能对你有帮助,虽然这取决于你如何调用所有函数(在这种情况下,没有参数)。
functions = [f0, f1, f2, ...]
for f in functions:
var, msg = f()
if not var:
break