我的第一个问题是这个问题更抽象的问题是什么:'为表达式返回 6 的操作是什么 (2 and 2*3)
?请随时适当地重新命名我的问题。
我的第二个问题是在 python 中返回 6 的(2 and 2*3)
. 这里似乎发生了一些优雅的事情,我想了解一下这个操作。
我的第一个问题是这个问题更抽象的问题是什么:'为表达式返回 6 的操作是什么 (2 and 2*3)
?请随时适当地重新命名我的问题。
我的第二个问题是在 python 中返回 6 的(2 and 2*3)
. 这里似乎发生了一些优雅的事情,我想了解一下这个操作。
来自Python 语言参考:
请注意,既不
and
也不or
限制它们返回的值和类型为 False 和 True,而是返回最后评估的参数。
因此,2 and 2*3
意味着它首先评估bool(2)
,评估为True
,然后评估bool(2*3)
评估为True
。因此它将返回最后一个评估的参数,即2*3
( 6
)。
根据python 文档
x 和 y :如果 x 为假,则 x,否则 y
应用惰性求值,如果 a 求值为 False,python 返回a and b
a,如果 a 求值为 True,则返回 b。
因此 2 评估为 True,2 and 2*3
返回2*3
等于 6。
基本上和2 and 6
.
这个怎么运作?如果它被认为是 False ( , , ...),and
则返回第一个元素,否则返回第二个False
0
[]
这与 Python 如何评估表达式有关x and y
。它返回y
if x
isTrue
和x
if x
if False
。
因此,如果2 and 2 * 3
, 因为2
被评估为True
,它将返回值2 * 3
,即6
。
如果and
多个操作数之间进行运算,则返回第一个非值True
,如果所有值都是True
,则返回最后一个值。
类似地,对于or
运算符,表达式 say,A or B or C
返回第一个值 True
。如果所有值都是False
,则返回最后一个值。