1

我是论坛的新人,所以希望这个问题不是太初级或者以前有人问过。在 python 中编写一些代码时,我发现返回 true 或 false 的单个函数(这里称为 function1、function2 和 function3)将具有相同的输出写入屏幕,因此我想像这样将它们链接在一起;

if function1 or function2 or function3: 
    print "something"

我知道 function3 会花费更多时间来运行,所以我想避免它。由于现在编写了条件,在我看来,如果 Python 首先将 function1 评估为 false,然后停止对其他条件的评估,因为它知道 if 条件已经被破坏,这对我来说会很棒。另一种可能性是在评估组合表达式的真值之前分别找到所有三个函数的返回值。有人知道 if 条件评估中的动作顺序吗?

4

2 回答 2

3

Python 已经通过一种称为“短路”评估的机制为您完成了这项工作。

如果在评估期间的任何阶段发现布尔表达式为 False(对于 an and)或 True(对于 an or),则不会评估表达式的其余部分,因为最终结果已经在该点确定。

所以你把东西放到你的布尔表达式中的顺序真的很重要。

这非常有用,因为您可以执行以下操作:

if i != 0 and 2332.0 / i:
   ...

避免用简单的表达式除以零(即,如果为零and,则永远不会发生除法)。i

另外,请注意:您确实需要()函数调用才能工作。

最后,这种短路评估并不是 Python 独有的,很多语言都这样做。

于 2012-07-23T15:51:16.030 回答
2

你所说的叫做“短路”,python确实做到了。

但是,我认为如果您希望它正常工作,您希望使用and运算符,而不是or作为False or True返回TrueFalse and True返回False(无需查看第二个值)。为了完整起见,True or False返回True(无需查看False)。

此外,在您的示例中,您实际上并没有调用函数...在 python 中调用函数,您需要括号:

function1(args)  #for example
于 2012-07-23T15:51:49.817 回答