0

我是 python 新手。我已经使用以下代码测试了我的解释器,

In [1]: 2 and 3
Out[1]: 3

In [2]: 3 and 2
Out[2]: 2

In [3]: 3 or 2
Out[3]: 3

In [4]: 2 or 3
Out[4]: 2

在上面,取2=00103=0011。结果是,

+ 0010
  0011
  ----
  0010=2

但是Out[1]给出了 3(不准确)并out[2]给出了 2(准确)。

两种情况有什么区别?

4

4 回答 4

10

您正在使用布尔逻辑orandand,它会短路(返回运算符结果固定的第一个操作数)。

您正在寻找二进制按位运算符|并且&

>>> 0b10 & 0b1
0
>>> 0b10 | 0b1
3

or如果它是 true-y(非空或数字 0),则运算符返回第一个操作数,否则返回第二个操作数,如果and它是 false-y,则运算符返回第一个操作数,否则返回第二个运算符。这就是为什么你看到3 and 2return23 or 2return 3。两者23都是非零的,因此在布尔上下文中是正确的。

用作0错误值,您会看到:

>>> 3 and 0
0
>>> 3 or 0
3
>>> 0 and 3
0
>>> 0 or 3
3
于 2013-06-17T09:38:08.953 回答
6

您正在寻找按位运算符,

>>> 2 & 3
2
>>> 2 | 3
3

通过这样做2 and 3,您正在评估2,即True,然后3(also True) 并且 Python 返回第二个数字。所以你得到3.

使用2 or 3,它会短路并返回2,因为2is True

于 2013-06-17T09:36:57.157 回答
2

您正在寻找按位和,&

andandor是 Python 中的布尔运算符,而&and|是位运算符。

例子 -

>>> 2 and 3
3
>>> 2 & 3
2
于 2013-06-17T09:36:59.673 回答
1

use &, 在 python中and是布尔值:AND

>>> 2 & 3
2
>>> 3 & 2
2
于 2013-06-17T09:37:13.063 回答