为什么两个值的AND运算符会给出最后一个值?

Why is and operator on two values gives the last value?(为什么两个值的AND运算符会给出最后一个值?)

本文介绍了为什么两个值的AND运算符会给出最后一个值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在对Python操作符进行一些修改,遇到了一些我不确定的事情。

如果我对两个整数执行按位运算(&;,|),我将毫不奇怪地获得它们的按位值
。 含义:

>>> a = 11
>>> b = 3
>>> a & b
3

这是因为按位AND对这些数字的二进制表示执行AND。 但是,如果我使用内置的AND运算符,我将获得第二个变量,而不考虑它的类型:

>>> b and a
11

>>> 'b' and 'a'
'a'

为什么会这样?

推荐答案

逻辑运算符对对象的真实性进行操作。每个对象都有真值,除非它有一个被显式重写以引发错误的__bool__方法。a and b(逻辑)和a & b(按位)之间的主要区别在于,前者适用于任何对象,而后者仅适用于支持按位运算的数值类型。

Python的逻辑运算符专门用于返回上次求值的对象的结果:

  • a and b:返回Falsyab(如果a为True)
  • a or b:返回TRUTYab(如果a为FALSE)

来自tutorial:

布尔运算符andor是所谓的短路运算符:从左到右计算它们的参数,一旦确定结果,计算就停止。例如,如果AC为真,但B为假,则A and B and C不计算表达式C。当用作常规值而不是布尔值时,短路运算符的返回值是最后计算的参数。

此属性半惯用地用于在访问值之前检查值。例如,如果列表必须包含元素,则可以执行类似

的操作
if x and x[0] == value:
    # ...

这不会引发错误,因为如果x为Falsy(空),and表达式将返回x而不是x[0] == value

这篇关于为什么两个值的AND运算符会给出最后一个值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:为什么两个值的AND运算符会给出最后一个值?