gpt4 book ai didi

python - Python短路的值(value)是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 10:02:03 25 4
gpt4 key购买 nike

我正在学习名为 Python 中的数据结构和算法 的书。

在介绍逻辑运算符的第12页,它写道:

The and and or operators short-circuit, (I thinks it should add is called), in that they do not evaluate the second operand if the result can be determined based on the value of the first operand.

This feature is useful when constructing Boolean expressions in which we first test that a certain condition holds (such as a reference not being None), and then test a condition that could have otherwise generated an error condition had the prior test not succeeded.

我对这段话有一些疑问:

  • 我无法理解第二段的确切含义。在C语言中,我们可以使用&&(逻辑and)作为如下表达式:(i != 0) && (j/i > 0) 防止被零除的错误。那么,我可以在 Python 中使用表达式 (i != 0) and ( j/i > 0) 来获得相同的效果吗?我对这段话的理解对吗?

  • or 作为 short-circuit 来构造第二段中所说的 bool 表达式有什么用?

  • 最后一题是关于第二段had the prior test not succeeded的语法。我认为这应该是“可能导致先前测试未成功的错误情况”,对吗?

最佳答案

我记得,短路指的是编译器优化。如您所知,在 AND 条件中,如果第一个条件为假,则不会计算第二个表达式。毕竟,有什么意义呢?整个表达式不能为真,因为第一个条件已经为假。类似地,对于 OR 逻辑,只要一个条件为真,整个 OR 表达式就为真。这归结为节省运行时间。表达式可以不求值,因此不会消耗任何 CPU 周期。

顺便说一句,我在 bash 编程中一直使用 OR 短路。例如,如果前面的条件为假,则以下表达式对于运行函数很有用:

[ $# -ge 2 ] || errexit "You have not supplied enough parameters"

在上面的例子中,只有当命令行没有 2 个或更多参数时,errexit 才会被调用。当然,在我的示例中,我不关心性能。相反,我正在使用 ||作为语法糖的短路逻辑。

归根结底就是:在性能很重要的紧密循环中,您可以确定不会对表达式进行不必要的求值。但是在您为 && 描述的避免被零除的示例中,您可以使用嵌套的 IF 语句轻松编写它。同样,这是一种风格选择,而不是性能考虑。

综上所述,让我一次回答一个问题:

I can't understand exact meaning of the second paragraph. In C, we can use the &&(logical and) as the following expression: (i != 0) && (j / i > 0) to prevent the error of a division by zero. So then, could I use the expression (i != 0) and ( j / i > 0) in Python as C to get the same effect? Is my understanding to the passage right?

你是对的。

What's the usage of or as a short-circuit to constructing Boolean expressions as said in the second paragraph ?

正如我在上面详细解释的那样:性能和语法糖(即更少的输入和更短的表达式;习语)。

The final question is about the grammar of had the prior test not succeeded in the second paragraph. I this it should be "an error condition that can had the prior test not succeeded", am I right?

我同意您的看法,该声明的措辞可以更好。但是当你试图表达它时,你会发现这是一件很难做的事情(事实上,你的建议是无效的)。基本上,您避免被零除错误的示例是作者试图表达的完美示例。这是我试图解释的:短路逻辑可用于检查表达式的前提条件,如果不满足这些条件可能会产生错误。

关于python - Python短路的值(value)是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43032801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com