3

我的第一个问题是这个问题更抽象的问题是什么:'为表达式返回 6 的操作是什么 (2 and 2*3)?请随时适当地重新命名我的问题。

我的第二个问题是在 python 中返回 6 的(2 and 2*3). 这里似乎发生了一些优雅的事情,我想了解一下这个操作。

4

6 回答 6

6

来自Python 语言参考

请注意,既不and也不or限制它们返回的值和类型为 False 和 True,而是返回最后评估的参数。

因此,2 and 2*3意味着它首先评估bool(2),评估为True,然后评估bool(2*3)评估为True。因此它将返回最后一个评估的参数,即2*3( 6)。

于 2013-08-17T19:48:15.363 回答
3

首先,您必须阅读内容,然后您必须阅读内容。:)

之后,您将知道这and是一个布尔运算符,它试图将其第一个操作数转换为布尔值。因此,如果您阅读第一件事,您会看到2转换为True.

您需要知道的第三件事是,如果and操作数转换为,则操作数将返回其第一个参数,如果False计算结果为,则返回第二个参数True

所以基本上

z = x and y

可以翻译成:

if x:
    z = y
else:
    z = x

现在你明白了一切。:)

2被评估为True然后and运算符返回它的第二个参数的值,即6.

于 2013-08-17T19:51:01.407 回答
3

根据python 文档

x 和 y :如果 x 为假,则 x,否则 y

于 2013-08-17T19:51:51.930 回答
1

应用惰性求值,如果 a 求值为 False,python 返回a and ba,如果 a 求值为 True,则返回 b。

因此 2 评估为 True,2 and 2*3返回2*3等于 6。

于 2013-08-17T19:48:22.900 回答
1

基本上和2 and 6.

这个怎么运作?如果它被认为是 False ( , , ...),and则返回第一个元素,否则返回第二个False0[]

于 2013-08-17T19:48:25.020 回答
1

这与 Python 如何评估表达式有关x and y。它返回yif xisTruexif xif False

因此,如果2 and 2 * 3, 因为2被评估为True,它将返回值2 * 3,即6

如果and多个操作数之间进行运算,则返回第一个非True,如果所有值都是True,则返回最后一个值。
类似地,对于or运算符,表达式 say,A or B or C返回第一个 True。如果所有值都是False,则返回最后一个值。

于 2013-08-17T19:48:27.963 回答