Python 支持短路吗?
Python 支持布尔表达式中的短路吗?
Does Python support short-circuiting in boolean expressions?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
Python 支持布尔表达式中的短路吗?
Does Python support short-circuiting in boolean expressions?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(3)
是的,
and
和or
运算符都短路 - 请参阅 文档。Yep, both
and
andor
operators short-circuit -- see the docs.运算符
and
、or
中的短路行为:让我们首先定义一个有用的函数来确定是否执行某些操作。一个简单的函数,它接受一个参数,打印一条消息并返回输入,保持不变。
人们可以观察 Python 的短路行为and、
or
运算符的 a>:注意: 解释器认为以下值表示 false:
短路函数中的行为:
any()
、all()
:Python 的
any()
和all()
函数也支持短路。如文档所示;他们按顺序评估序列中的每个元素,直到找到允许提前退出评估的结果。考虑下面的例子来理解两者。函数
any()
检查是否有元素为 True。一旦遇到 True,它就会停止执行并返回 True。函数
all()
检查所有元素为 True 并在遇到 False 时立即停止执行:链式比较中的短路行为:
此外,在 Python 中
编辑:
还有一个有趣的地方需要注意 :- 逻辑
and
、or
运算符返回操作数的值,而不是布尔值 (True< /code> 或
False
)。例如:与其他语言不同,例如
&&
,||
C 中返回 0 或 1 的运算符。示例:
类似地,
or
运算符返回最左边的值,其中bool(value)< /code> ==
True
else 最右边的 false 值(根据短路行为),示例:那么,这有什么用呢? 实用 Python 作者:Magnus Lie Hetland:
假设用户应该输入他或她的姓名,但可能选择不输入任何内容,在这种情况下,您希望使用默认值
''
。您可以使用 if 语句,但也可以非常简洁地陈述事情:
换句话说,如果
raw_input
的返回值为 true(不是空字符串),则将其分配给 name (没有任何变化) );否则,默认的''
会分配给name
。Short-circuiting behavior in operator
and
,or
:Let's first define a useful function to determine if something is executed or not. A simple function that accepts an argument, prints a message and returns the input, unchanged.
One can observe the Python's short-circuiting behavior of
and
,or
operators in the following example:Note: The following values are considered by the interpreter to mean false:
Short-circuiting behavior in function:
any()
,all()
:Python's
any()
andall()
functions also support short-circuiting. As shown in the docs; they evaluate each element of a sequence in-order, until finding a result that allows an early exit in the evaluation. Consider examples below to understand both.The function
any()
checks if any element is True. It stops executing as soon as a True is encountered and returns True.The function
all()
checks all elements are True and stops executing as soon as a False is encountered:Short-circuiting behavior in Chained Comparison:
Additionally, in Python
Edit:
One more interesting point to note :- Logical
and
,or
operators in Python returns an operand's value instead of a Boolean (True
orFalse
). For example:Unlike in other languages e.g.
&&
,||
operators in C that return either 0 or 1.Examples:
Similarly
or
operator return left most value for whichbool(value)
==True
else right most false value (according to short-circuiting behavior), examples:So, how is this useful? One example is given in Practical Python By Magnus Lie Hetland:
Let’s say a user is supposed to enter his or her name, but may opt to enter nothing, in which case you want to use the default value
'<Unknown>'
.You could use an if statement, but you could also state things very succinctly:
In other words, if the return value from
raw_input
is true (not an empty string), it is assigned to name (nothing changes); otherwise, the default'<Unknown>'
is assigned toname
.是的。在 python 解释器中尝试以下操作:
和
或
Yes. Try the following in your python interpreter:
and
or