在我们平时敲代码时常常要用到各种各样的运算符,比如常见的算数运算和赋值运算,不过当中可能有一些经常忽略的细节,比如is==是否可以互相代替?and&一样吗?这些符号分别对应着Python中的身份运算符、比较运算符、逻辑运算符和位运算符,今天我们就来通过两个小案例一起学习吧!

  • 案例1-is==是否可以互相代替?

python替代autojs python替代符号_编程语言

可以看到,b is a输出结果为False,而b==a输出的结果为True。

==is分别对应于比较运算符和身份运算符,在解答之前,我们先了解一下这两类运算符。

比较运算

       比较运算符用于解决两个对象之间的比较大小的问题,输出的结果为True和False,具体符号如下表所列:

运算符

描述

==

判断两个对象是否相等,真为True,假为False

!=

判断两个对象是否不相等,结果表示同上

> < >= <=

判断大小

       比较运算符在数值型的计算中应用非常广泛,同时,我们也可以在字符串和列表里进行比较,演示如下:

print(4!=5)  #判断a与b是否相等
print("abc" < "aba") # 逐个比较两个字符串相应位置字符的ASCII码大小
print("abc" == "abc") # 比较两个字符串的内容是否相同
print([1,2,3] == [1,2,3,4])  #比较两个列表的内容是否相同
print([1,2,3] > [1,3,'a']) #逐个比较两个列表相应位置元素的ASCII码大小

输出结果为:

python替代autojs python替代符号_编程语言_02

身份运算

  身份运算用于比较两个对象的存储单元,表示两个对象是否储存在一个单元里,其运算符如下:

运算符

描述

is

判断两个标识符是不是引用自一个对象

is not

判断两个标识符是不是引用自不同对象

       以下实例演示了身份运算符的操作:

python替代autojs python替代符号_字符串_03

       了解完两种运算符后,我们可以解答开头提到的问题。==是比较运算符,用于判断二者是否相等;is是身份运算符,用于判断二者是否相同。

       更具体来说, == 会判断引用变量的值是否相等,is判断两个变量引用对象是否为同一块内存空间。

       上述例子中,a,b的形式相同,但是存储位置不同,所以输出结果不同。

       如果我们直接令b=a再进行判断,输出结果便都变为True,如下所示:

python替代autojs python替代符号_python替代autojs_04

  • 案例2-and&傻傻分不清楚?

python替代autojs python替代符号_python替代autojs_05

       可以看到a&b的运算结果为12,a and b的运算结果则为13,这与我们的直觉结果有所差异。

       这是因为二者为两种完全不同类型的运算符,分别对应于Python中的位运算符和逻辑运算符,下面依次进行讲解。

位运算

  位运算就是是把数值看作二进制来进行计算,计算机首先将输入的变量值转化为二进制,然后按照位运算的法则进行计算并输出结果,下面展示位运算的具体符号:

运算符

描述

运算规则

&

按位与运算符

上下都是1则为1,其他情况为0

|

按位或运算符

上下其中一个是1则为1,其他情况为0

^

按位异或运算符

上下相同为0,不同为1

~

按位取反运算符

一个有符号二进制的补码形式

<<

左移运算符

乘法运算,左移一位就是乘以2

>>

右移运算符

除法运算,右移一位就是除以2

       上述例子中,c的输出结果为12,看起来与a、b的取值似乎毫无关联。这是因为位运算符的结果以十进制数展示,但它的运算过程是以二进制为依据的,我们可以把上述各变量转化为二进制来便于理解:

python替代autojs python替代符号_python替代autojs_06

       &的运算规则为两个相应位均为1才返回1,因此上述运算结果会返回00001100,转化为十进制后即为12。

       位运算符中的其他符号与之原理类似,大家可以自己动手试试~例如,左移运算符<<代表将各二进位全部左移若干位,示例如下:

python替代autojs python替代符号_字符串_07

逻辑运算

  逻辑运算可以分为"与" "或" "非"语句,输出的结果也为布尔值,具体如下:

运算符

描述

and

布尔"与",左右皆真才为真

or

布尔"或",左右一个为真即为真

not

布尔"非" ,条件为真则为假

操作运行如下:

print(True and True) #左为真,右也为真,与语句为真
print (True or False) #左为真,右为假,或语句为真
print (not True or False) #条件为真,非语句为假



以上实例输出结果:

python替代autojs python替代符号_java_08

       上面的代码中运算符左右均为布尔值,因此判断起来较为容易。对于非布尔值的变量,在Python里会将0、[]、()、{}、和None对应于False;其他对应于True。此外,在布尔上下文中,若所有值均为True,and返回最后一个为True的值;若所有值均为False,and返回第一个为False的值。示例如下:

python替代autojs python替代符号_字符串_09

在案例2中,a、b均对应为True,且b为最后一个变量,因此返回b的取值,即为13。