Python运算符—比较(关系)运算符&身份运算符

1、关系运算符

比较运算符,也叫关系运算符,用于对常量、变量或表达式的结果进行大小比较,成立则返回 True(真),否则返回 False(假)。

关系运算符包括大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)、不等于(!=)。顾名思义,大部分关系运算符等价于数学符号。

不等于(<>)相当于不等于(!=),在python3.x中已废除。

运算符连用,表示and,比如:a>bb and b

例子①:


print('{}>{}的结果是:{}'.format(-1,0,-1>0))
print('{}<{}的结果是:{}'.format(-1,0,-1<0))

print('{}>{}>{}的结果是:{}'.format(-1,0,1,-1>0>1))
print('{}<{}<{}的结果是:{}'.format(-1,0,1,-1<0<1))
print('{}>{}<{}的结果是:{}'.format(-1,0,1,-1>0<1))
print('{}<{}>{}的结果是:{}'.format(-1,0,1,-1<0>1))
print('{}>{}<{}的结果是:{}'.format(0,-1,1,0>-1<1))
print('{}<{}>{}的结果是:{}'.format(-1,1,0,-1<1>0))

print('{}=={}的结果是:{}'.format(1,0,1==0))
print('{}!={}的结果是:{}'.format(1,0,1!=0))
print('{}>={}的结果是:{}'.format(1,0,1>=0))
print('{}<={}的结果是:{}'.format(1,0,1<=0))

执行结果:


-1>0的结果是:False
-1<0的结果是:True
-1>0>1的结果是:False
-1<0<1的结果是:True
-1>0<1的结果是:False
-1<0>1的结果是:False
0>-1<1的结果是:True
-1<1>0的结果是:True
1==0的结果是:False
1!=0的结果是:True
1>=0的结果是:True
1<=0的结果是:False

数字与True和False比较是,True表示1,False表示0。

例子②


print('{}=={}的结果是:{}'.format(1,True,1==True))
print('{}!={}的结果是:{}'.format(False,0,False!=0))
print('{}>={}的结果是:{}'.format(False,0,False>=0))
print('{}<={}的结果是:{}'.format(True,0,True<=0))

字符串之间也可以进行比较。字符串比较的是依次比较字符的ASCII码。在字符串字符相同的情况下,字符多的字符串大。

空格的ASCII码是32,空(null)的ASCII码是0。

例子③


str_1 = 'a'
str_2 = 'b'
str_3 = 'A'
str_4 = 'B'
print(ord(str_1))
print(ord(str_2))
print(ord(str_3))
print(ord(str_4))
print('{}>{}的结果是:{}'.format( 'a','b','a'>'b'))
print('{}<{}的结果是:{}'.format('Ab', 'AB','Ab'< 'AB'))

执行结果


97
98
65
66
a>b的结果是:False
Ab

2、身份运算符

身份运算符用于比较两个对象的存储单元,表达式成立则返回真,否则返回假。身份运算符包括is,is not。

is用于判断两个标识符是否引自同一个对象。is not用于判断两个标识符是否引自不同对象。

例子

a = 1
b = -1
c = -1
str_1 = 'Ab'
str_2 = 'AB'
str_3 = 'ab'

print(id(a))
print(id(b))
print(id(c))
print(id(str_1))
print(id(str_2))
print(id(str_3))


print('{} is {}的结果是{}'.format(a,b,a is b))
print('{} is {}的结果是{}'.format(a,c,a is c))
print('{} is {}的结果是{}'.format(c,b,c is b))

print('{} is {}的结果是{}'.format(str_1,str_2,str_1 is str_2))
print('{} is {}的结果是{}'.format(str_1,str_3,str_1 is str_3))
print('{} is {}的结果是{}'.format(str_2,str_3,str_2 is str_3))

print('{} is not {}的结果是{}'.format(a,b,a is not b))
print('{} is not {}的结果是{}'.format(a,c,a is not c))
print('{} is not {}的结果是{}'.format(c,b,c is not b))

print('{} is not {}的结果是{}'.format(str_1,str_2,str_1 is not str_2))
print('{} is not {}的结果是{}'.format(str_1,str_3,str_1 is not str_3))
print('{} is not {}的结果是{}'.format(str_2,str_3,str_2 is not str_3))

执行结果

1804495888
1804495824
1804495824
2674699400672
2674701079864
2674701079920
1 is -1的结果是False
1 is -1的结果是False
-1 is -1的结果是True
Ab is AB的结果是False
Ab is ab的结果是False
AB is ab的结果是False
1 is not -1的结果是True
1 is not -1的结果是True
-1 is not -1的结果是False
Ab is not AB的结果是True
Ab is not ab的结果是True
AB is not ab的结果是True

3、等于(==)和 is 的比较

等于(==)用来比较两个变量的值(value)是否相等。

is和is not用来比较两个对象的身份跟标识,也就是地址(id)。

例子①

str_1 = 'abc'
str_2 =  "abc"
str_3 ='''
abc
'''
str_4 ='''abc'''

print(id(str_1))
print(id(str_2))
print(id(str_3))
print(id(str_4))

print('{} == {}的结果是:{}'.format( str_1,str_2,(str_1==str_2)))
print('{} == {}的结果是:{}'.format(str_1,str_3,(str_1==str_3)))
print('{} == {}的结果是:{}'.format(str_2,str_3,(str_2==str_3)))

print('{} is {}的结果是:{}'.format( str_1,str_2,(str_1 is str_2)))
print('{} is {}的结果是:{}'.format(str_1,str_3,(str_1 is str_3)))
print('{} is {}的结果是:{}'.format(str_2,str_3,(str_2 is str_3)))

print('{} is not {}的结果是:{}'.format( str_1,str_2,(str_1 is not str_2)))
print('{} is not {}的结果是:{}'.format(str_1,str_3,(str_1 is not str_3)))
print('{} is not {}的结果是:{}'.format(str_2,str_3,(str_2 is not str_3)))

执行结果

1757872016328
1757872016328
1757903689072
1757872016328
abc == abc的结果是:True
abc ==
abc
的结果是:False
abc ==
abc
的结果是:False
abc is abc的结果是:True
abc is
abc
的结果是:False
abc is
abc
的结果是:False
abc is not abc的结果是:False
abc is not
abc
的结果是:True
abc is not
abc
的结果是:True

例子②


a = [1, 2, 3]
b = a[:]
print(a)
print(b)
print('{} == {}的结果是:{}'.format(a,b,(a==b)))
print('{} is {}的结果是:{}'.format( a,b,(a is b)))
print('{} is {}的结果是:{}'.format( a,b,(a is not b)))

执行结果


[1, 2, 3]
[1, 2, 3]
[1, 2, 3] == [1, 2, 3]的结果是:True
[1, 2, 3] is [1, 2, 3]的结果是:False
[1, 2, 3] is [1, 2, 3]的结果是:True

可以发现,同一字符串赋值时三引号换行与不换行占用的内存是不同的。切片操作后字符串占用的内存也是不同的。

● ● ●

综上所述:
1)字符串之间的比较,比较的是unicode编码,当所有字符的unicode都相同时,字符串长的大。
2)关系运算符判断的是对象的值,身份运算符判断的是对象的id。
3)在不进行任何操纵时,python对象相同时候id是相同的,也就是说占用的内存是相同的,地址是相同的。

参考文章:python运算符
Python运算符—比较(关系)运算符&身份运算符_第1张图片

你可能感兴趣的:(python)