当python中的变量更改时退出代码块

2024-05-20 00:37:57 发布

您现在位置:Python中文网/ 问答频道 /正文

当var变为False时,我遇到了需要退出代码块的问题。 e、 g

...
var = True
var, msg = somefunction1(x)
var, msg = somefunction2(y)
var, msg = somefunction3(z)
...

somefunction*可以返回True或False。当var变为False时,有没有办法不在每行后面添加if语句来退出这个块?在

注:有很多函数,它们的名字不一样。在


Tags: 函数代码falsetrueifvarmsg语句
2条回答

类似这样的方法可能会对您有所帮助,尽管这取决于如何调用所有函数(在本例中,没有参数)。在

functions = [f0, f1, f2, ...]
for f in functions:
    var, msg = f()
    if not var:
        break

我不得不猜测一下,因为我在您的示例中缺少一些上下文,但是您可以使用一个函数列表和一个循环?(这仍然涉及一个if,因为另一种方法更混乱)

functions = [somefunction1, somefunction2, somefunction3]

for func in functions:
    var, msg = func()
    if not var:
        break

像那样的?在

但我是说,如果你真的讨厌if语句:

^{pr2}$

基于更新,以及不愿意将函数直接写入列表,您可以(但不应该-认真地说,只列出函数)执行类似的操作(这假设所有函数都是在没有参数的情况下调用的,如果没有参数,则将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]

但重申一下——仅仅因为你能做到这一点,并不意味着你应该这么做。我是说,你看,这是一个可恶的东西。在

相关问题 更多 >