Python嵌套条件传播

时间:2016-05-24 01:25:19

标签: python

我有以下情况:

1)如果 condition1 是False run方法。

2)如果 condition1 为True且 condition2 为False,请运行方法。我是通过设置标志来做到的,我是在过度复杂化了什么?

condition1 = False
condition2 = True
dirty = False

if condition1:
    if condition2:
        dirty = True
        print "dirty"


if not condition1 or dirty:
    print "run()"

3 个答案:

答案 0 :(得分:0)

这个逻辑基本上归结为!condition1 | condition2,在Python中为not condition1 or condition2(或condition2 or not condition1)。

因此,您可以将代码重写为:

if not condition1 or condition2:
    # run method

答案 1 :(得分:0)

正如您所写的那样,如果dirtycondition1都是condition2,似乎会出现True情况。

您可以通过向if not (condition1 or dirty):添加括号来实现您想要的逻辑。以这种方式编写意味着我们调用该方法的唯一方法是condition1dirty都是True,这是唯一的您的陈述未涵盖的案例。

然而,你确实可以在没有设置标志的情况下实现这个逻辑,我会建议它最好这样做:

if not condition1 or (condition1 and not condition2):
    run()

可以简化为:

if not condition1 or not condition2:
    run()

因为如果condition1确实不成立,则第一个条件已经满足,并且Python继续并调用该方法。只有当 为真时,Python才需要检查'或'的另一半。声明,如果我们正在检查condition2的状态,我们可以假设condition1True

请注意,在if not a or b语句中,not不会分发,可以通过检入repl来验证:

>>> not False or True

True

答案 2 :(得分:0)

你只需要这样做:

Firebase Invites


说明:
1 - 如果condition1 True ,则不是(condition1) False ,因此它将转到[cond1或cond2]的第二个子句语句,它将测试condition2,如果它是False,not(condition2)将为True并且方法将被运行,否则,if语句将被忽略。
2 - 如果condition1 False ,则(condition1)将 True ,并且编译器不会测试第二个条件,因为我们有 OR 运算符,如果一个或所有子句 True ,则 True ,因此,该方法将在不考虑condition2的情况下运行。