为什么两个值上的 and 运算符给出最后一个值?
Why is and operator on two values gives the last value?
我一直在对 Python 运算符进行一些修补,但遇到了一些我不确定的事情。
如果我对 2 个整数执行按位运算(&、|),我将不出所料地得到它们的按位值
。
含义:
>>> a = 11
>>> b = 3
>>> a & b
3
这是因为按位和执行此数字的二进制表示。
但是,如果我使用内置的 and 运算符,我将获得第二个变量,而不管它是什么类型:
>>> b and a
11
>>> 'b' and 'a'
'a'
为什么会这样?
第一个案例and
:
>>> b and a #(11 and 3, both the values evaluates to be true because non-zero)
11
>>> 'b' and 'a' #(again both are evaluated to be true because non-empty)
对于and
,所有条件都需要是True
,所以如果前面的计算结果是True
,则检查到最后一项,因此你得到最后一项。
逻辑运算符对对象的真实性进行运算。每个对象都有真值,除非它有一个 __bool__
方法被显式覆盖以引发错误。 a and b
(逻辑)和a & b
(按位)之间的主要区别在于前者适用于任何对象,而后者仅适用于支持按位运算的数值类型。
Python 的逻辑运算符专门设计用于 return 最后计算的对象的结果:
a and b
:Returns 一个错误的 a
,或 b
(如果 a
是真实的)
a or b
: Returns 一个 Truthy a
, 或 b
(if a
if falsy)
来自tutorial:
The Boolean operators and
and or
are so-called short-circuit operators: their arguments are evaluated from left to right, and evaluation stops as soon as the outcome is determined. For example, if A
and C
are true but B
is false, A and B and C
does not evaluate the expression C
. When used as a general value and not as a Boolean, the return value of a short-circuit operator is the last evaluated argument.
此 属性 半惯用地用于在访问值之前检查值。例如,如果一个列表必须包含一个元素,你可以这样做
if x and x[0] == value:
# ...
这不会引发错误,因为如果 x
为 Falsy(空),and
表达式将 return x
而不是 x[0] == value
.
The expression x and y
first evaluates x; if x is false, its value is returned; otherwise, y is evaluated and the resulting value is returned.
由于 Python 将字符串和非零整数的布尔值都视为 True
,因此 x and y
将暗示 True and True
,并且由于第一条语句不为 False,计算第二条语句并返回结果值(即第二项的值)。
案例 1:A 和 B
这里考虑 A , B 都是非零的,并且它检查 A, B ,即它首先评估 A 如果在二进制转换后的 A 中(为了理解考虑正整数,A > 0 和 B > 0)是否存在 1 或not ,如果是,它将移动到 B 并且 returns B 作为输出。因为 and 检查 A 和 B.
A 或 B
在这里它检查 A 与上面相同,如果它在转换为二进制后有 1,
如果 A 为 True 则 return A(显然 A > 0 所以它 return A only )。
情况 2:假设 A、B 中的任意 1 或 A、B 均为 ZEROES
我会尝试以更好的方式解释。我希望我们都知道 'AND' 和 'OR' 和 'XOR' 的真值表。
这里发生的同样的事情只是用任何数字替换 1's 和 0's,如果你想你使用 只有 1's 和 0's 以更好的方式理解 .
我一直在对 Python 运算符进行一些修补,但遇到了一些我不确定的事情。
如果我对 2 个整数执行按位运算(&、|),我将不出所料地得到它们的按位值
。
含义:
>>> a = 11
>>> b = 3
>>> a & b
3
这是因为按位和执行此数字的二进制表示。 但是,如果我使用内置的 and 运算符,我将获得第二个变量,而不管它是什么类型:
>>> b and a
11
>>> 'b' and 'a'
'a'
为什么会这样?
第一个案例and
:
>>> b and a #(11 and 3, both the values evaluates to be true because non-zero)
11
>>> 'b' and 'a' #(again both are evaluated to be true because non-empty)
对于and
,所有条件都需要是True
,所以如果前面的计算结果是True
,则检查到最后一项,因此你得到最后一项。
逻辑运算符对对象的真实性进行运算。每个对象都有真值,除非它有一个 __bool__
方法被显式覆盖以引发错误。 a and b
(逻辑)和a & b
(按位)之间的主要区别在于前者适用于任何对象,而后者仅适用于支持按位运算的数值类型。
Python 的逻辑运算符专门设计用于 return 最后计算的对象的结果:
a and b
:Returns 一个错误的a
,或b
(如果a
是真实的)a or b
: Returns 一个 Truthya
, 或b
(ifa
if falsy)
来自tutorial:
The Boolean operators
and
andor
are so-called short-circuit operators: their arguments are evaluated from left to right, and evaluation stops as soon as the outcome is determined. For example, ifA
andC
are true butB
is false,A and B and C
does not evaluate the expressionC
. When used as a general value and not as a Boolean, the return value of a short-circuit operator is the last evaluated argument.
此 属性 半惯用地用于在访问值之前检查值。例如,如果一个列表必须包含一个元素,你可以这样做
if x and x[0] == value:
# ...
这不会引发错误,因为如果 x
为 Falsy(空),and
表达式将 return x
而不是 x[0] == value
.
The expression
x and y
first evaluates x; if x is false, its value is returned; otherwise, y is evaluated and the resulting value is returned.
由于 Python 将字符串和非零整数的布尔值都视为 True
,因此 x and y
将暗示 True and True
,并且由于第一条语句不为 False,计算第二条语句并返回结果值(即第二项的值)。
案例 1:A 和 B
这里考虑 A , B 都是非零的,并且它检查 A, B ,即它首先评估 A 如果在二进制转换后的 A 中(为了理解考虑正整数,A > 0 和 B > 0)是否存在 1 或not ,如果是,它将移动到 B 并且 returns B 作为输出。因为 and 检查 A 和 B.
A 或 B
在这里它检查 A 与上面相同,如果它在转换为二进制后有 1, 如果 A 为 True 则 return A(显然 A > 0 所以它 return A only )。
情况 2:假设 A、B 中的任意 1 或 A、B 均为 ZEROES 我会尝试以更好的方式解释。我希望我们都知道 'AND' 和 'OR' 和 'XOR' 的真值表。 这里发生的同样的事情只是用任何数字替换 1's 和 0's,如果你想你使用 只有 1's 和 0's 以更好的方式理解 .