Python(3)——Python的运算符

关注微信公众号IT小组,获取更多知识干货~


目录:

位运算符

算数运算符

赋值运算符

比较运算符

逻辑运算符


一:位运算符

位运算符在Python中有“按位与”、“按位或”、“按位异或”、“按位取反”、“左移”、“右移”等。

如下:
&:按位与,将数值转为二进制,按位进行与运算。

|:按位或,将数值转为二进制,按位或运算。

^:按位异或,将数值转为二进制,按位异或运算。

~:按位取反,将数值转为二进制,按位取反运算。

“<<”:左移,将数值转为二进制,按位左移。

“>>”:右移,将数值转为二进制,按位右移。

“&”按位与运算的例子如下:

a = 45 
b = 20 
print ( a & b )
# 打印结果如下:
4
# 原理如下:
45 转为二进制: 0010 1101
20 转为二进制:0001 010045&20:(“与”同为1则为1,否则为0-----------
 0010 1101
 0001 0100
-----------
 0000 0100 转为十进制为:4|”或运算的例子如下:

a = 45 
b = 20 
print ( a | b )
# 打印结果如下:
61# 原理如下:
45 转为二进制是:0010 1101
20 转为二进制是:0001 010045|20:(“或”运算,有11,都00-----------
 0010 1101
 0001 0100
-----------
 0011 1101 转为十进制为:61

“|”或运算的例子如下:

a = 45 
b = 20 
print ( a | b )
# 打印结果如下:
61# 原理如下:
45 转为二进制是:0010 1101
20 转为二进制是:0001 010045|20:(“或”运算,有11,都00-----------
 0010 1101
 0001 0100
-----------
 0011 1101 转为十进制为:61

“^”异或运算的例子如下:

a = 45 
b = 20 
print ( a ^ b )
# 打印结果如下:
57
# 原理如下:
45 转为二进制为:0010 1101
20 转为二进制为:0001 010045^20:(“异或”运算相同为0,不同为1-----------
 0010 1101
 0001 0100
-----------
 0011 1001 转为十进制为:57

“~”按位取反的例子如下:

c = 12
print ( ~c )
# 打印结果如下:
-13# 原理如下:
12 转为二进制为: 0001100
~12 转为二进制为:1110011(补码)
补码转为源码减1在取反:
1110011-1=1110010
1110010取反则为0001101 转为十进制为:-13(
扩充知识:负数的二进制形式是,以-13为例,
先求源码,-13的源码是0000 1101
在取反码,0000 1101 取反为 1111 0010+1取得补码,1111 0010 + 1 = 1111 0011 转为十进制为: -13
)

取反码有一种简单的算法,是“-(a+1)”,例如:

print ( ~5 ) 
# 打印结果如下:
-6

“<<”左移例子如下:

print ( 5 << 3 )
# 打印结果如下:
40# 原理如下:
n << m 等于 n乘与2的m次方
( 5 << 3 = 5 * 2^3 )

“>>”右移的例子如下:

print ( 8 >> 2 )
# 打印结果如下:
2# 原理如下:
 n >> m 等于 n 除以2的m次方
 ( 8 >> 2 = 8 ÷ 2^2 )

二:算数运算符

算数运算符是比较常见的类型,有加法、减法、乘法、除法、取余、平方等等。

Python中的常见算数运算符如下:

print ( 1 + 1 ) # 加法运算符
print ( 2 - 1 ) # 减法运算符
print ( 2 * 3 ) # 乘法算符
print ( 6 / 3 ) # 除法运算符,结果为2.0(默认保留一位小数)
print ( 5 / 2 ) # 除法运算符,结果是2.5 
print ( 5 // 2 ) # 整除运算符,默认向下取整。结果为2
print ( 2 ** 3 ) # 幂运算,2^3=8,结果为8
print ( 10 % 3 ) # 取余运算,结果为1
print ( 58 % 100 ) # 取余运算,结果为58

上面都是数值之间的算数运算符。

在Python中字符串之间也可以使用算数运算符。Python支持两个字符串之间使用加法运算表示两个字符串连接起来,如下:

 print ( 'HI' + 'Hello' )
 # 打印结果如下:
 HIHello

字符串和数值之间也可以使用算数运算符,Python支持字符串和数字之间使用乘法运算符表示重复该字符几遍,但是字符串和数字之间使用加法运算符则会报错,如下:

print ( 'HI' * 5 ) # 在Python中字符串和数字相乘以为这重复几遍该字符串
# 打印结果如下:
 HIHIHIHIHI
​
 print ( 'HI' + 5 ) # 字符串和数值相加会报错
 # 会报错,错误类型如下:
 TypeError: can only concatenate str (not "int") to str
 # 从报错提示可知,只能是两个字符串之间使用加号

三:赋值运算符

赋值运算符是比较常见,在其他语言中比如C++,java等都是用“=”作为赋值运算符,Python也是如此,“=”在编程语言里的作用是将等号右边的常量或变量,赋值给等号左边。

a = 10 # 把数值10赋值给了a变量
 a  = b = c = 10 # Python中支持这种赋值语句,a,b,c的值都为10
 a , b , c = 1 , 2 , 3 # 右边的值依次赋值给左边的变量(解包)
 a = 1,2,3,4,5 # 这在Python中作为元组的赋值,a的值为(1,2,3,4,5) 
 a = 1 + 3 # 在Python中赋值等号的右边可以是表达式,常量等等,但是左边不可以
 a , b = 2 , 3 # Python中支持这个赋值语句,这在Python中被称为解包,将元组的元素解包分别给a,b此时它们的值分别为2,3

上面有一个很特殊的例子:“解包”
解包的过程意味着将右边的变量或常量依次传递给左边的变量,他们的个数都是相等的,如果不相等时则会报错,不过也有另外一种情况:

a , *b , c = 1 , 2 , 3 , 4 , 5  # *args ...等都可以存储多个值
print ( a , b , c )
# 打印结果如下:
1 [2, 3, 4] 5*a , b , c = 1 , 2 , 3 , 4 , 5
print ( a , b , c )
# 打印结果如下:
 [1, 2, 3] 4 5

可以发现,变量存储了多余的数据,并且以列表的数据类型来保存。(如果你不知道什么是列表不用慌张,后面会谈到)这是因为在Python中“”表示了可变的类型。(不能同时使用两个可变类型,否则会报错。)
在赋值运算符中还有一种是“复合赋值运算符”,如下所示:

a = 1 
a = a + 1 #代表a+1赋值给a
a += 1  # 与上面 a = a + 1 相等
a -= 1 # 表示a = a - 1
a *= 1 # 表示a = a * 1 
a /= 1 # 表示a = a / 1
a **= 2 # 表示a^2次方赋值给a
a //= 2 # 表示a整除与2赋值给a
a %= 2 # 表示a模等于2赋值给a

四:比较运算符

比较运算符,在Python中有“>”、“<”、“>=”、“<=”、“!=”、“==”。

“>”:大于

“<”:小于

“>=”:大于等于

“<=”:小于等于

“!=”:不等于(在Python2中不等于是“<>”)

“==”:等于

(比较运算的结果都是bool类型的值,例子如下:)

print ( 3 > 2 )
print ( 2 < 3 )
print ( 2 <= 3 )
print ( 3 <= 2 )
print ( 2 != 3 )
print ( 2 == 3 )
# 打印结果如下:
 True
 True
 True
 False
 True
 False

前面比较的都是数值型之间,而字符型和数值之间也可以是使用比较运算符的,但只支持两种比较符:

1:“!=”(不等于)

2:“==”(等于)

例子代码如下:

print ( 'HI' != 2 ) 
print ( 'HI' == 2 ) 
# 打印结果如下:
True
False

字符串和字符串之间支持的比较运算符有:

1:“>”

2:“<”

3:“==”

例子如下:

print ( 'hello' > 'zoon' )
# 打印结果如下:
Falseprint ( 'a' < 'b' )
# 打印结果如下:
Falseprint ( 'a' == 'b' )
# 打印结果如下:
False

上面之所以是False的原因是在Python中字符比较时,解释器会自动将字符转为对应的数字(ASCII码)进行比较,我们可以通过ord方法来获取字符对应的数字,如下:

print ( ord ( 'h' ) )
print ( ord ( 'z' ) )
# 打印结果如下:
104
122

从上面字符转为的数字可以明显得出,104是不大于122的,所以’hello’>'zoon’结果为False。

上面是正常的两个字符比较,如果两个字符的首部字符都是相同的呢,那么Python会逐个比较,例子如下:

print ( 'abc' > 'abd' )
# 打印结果如下:
False

字符串’abc’和’abd’前面两个字符都相同,但是第三个字符不同,c字符的ASCII码小于d字符,所以为False。

下面补充一点,如果两个是字符型的数字之间做比较如何呢,如下:

print ( '123' > '23' )
# 打印结果如下:
False

五:逻辑运算符

在Python中的逻辑运算符有and、or、not,in等

and:逻辑与,都为真时才返回True,否则返回False(and遇到第一个False就返回False)
or:逻辑或,都为假时才返回False,否则返回True(or遇到第一个True就返回True)

not:逻辑非,对bool值取反。

in:成员资格检查运算符。(这一节不做介绍)

and逻辑与运算的例子如下:

print ( 3 > 2 and 1 > 2 )
print ( True and True and False and True )
print ( 6 > 1 and 1 > 0 )
# 打印结果如下:
False
False
True

and逻辑与运算在计算机中的执行如上面所示,只要返回了False则不会在执行后面的and语句,如:

1 > 2 and print( 'HI' )
2 > 1 and print( 'Hello' )
# 打印结果如下:
hello

上面代码中之所以没有打印“HI”还是我们之前说的,and逻辑与只要碰到了第一个False就不会继续执行下面的代码了,因为还如上面所述,and遇到了False则最终的返回就是False。(这是逻辑与的“短路问题”,下面会介绍)

or逻辑或运算遇到第一个为True的值则返回,并且后面的代码不执行。
例子如下:

print ( False or False or True )
print ( 3 > 4 or 5 > 4 )
print ( 2 > 3 or 3 > 4 or 4 > 5 )
# 打印结果如下:
True
True
False

and逻辑与的“短路问题”,如下:

a =  2 and 'hi' and 0  and print ( 'HI' )
print(a)
# 打印结果如下:
0

and逻辑与会返回第一个是False的值(0转为bool值则是False),所以后面的print语句则不会执行,这就是and逻辑与的“短路问题”。

or逻辑或的“短路问题”,如下:

4 > 1 or print(  'HI' )
1 < 0 or print( 'Hello' )
# 打印结果如下:
Hello

逻辑或的短路问题与逻辑与的相反,逻辑或遇到了True之后就不会执行之后的代码了,因为逻辑或遇到了True就返回True,后面的代码不会影响到执行结果。

上面代码中“4 > 1 ”则直接返回True并不会接着继续执行下面的代码了。

而第二行代码“1 < 0” 返回是False,则会继续执行后面的代码(所以print语句才会执行),寻找为True的返回,除非都是False才返回False。

逻辑运算符返回的结果不一定都是bool类型,正如上面逻辑与的“短路问题”一样,例子如下:

 x = 3 and 2 and 0 and 'hello' and 'hi'
 a = 3 and 4 and False and 'hello'
 print ( x )
 print ( a )
 # 打印结果如下:
 0
 False

逻辑与运算取值的时候,会取第一个False的值。在第一个x取值的过程中,数字在逻辑运算中除了0以外都为True,所以当遇到0(False)时会返回。第二个a的取值也是如此,不过它直接用False作为返回值。(数字中0转为bool为False,字符串中空字符转为bool值为False,空列表转为bool为False,空字典转为bool为False)

补充:
上面and逻辑与的例子中都有代表为False的值返回,如果表达式没有False则会返回最后一个为True的值,如下:

a = 3 and 4 and 'hello' and 5 and 'HI'
print ( a )
# 打印结果如下:
HI

or逻辑运算是返回第一个True的值,若都为False则也返回最后一个为False的值,如下:

b = [] or {} or '' or None # 空列表、空字典、空字符串、None等转为bool值都为False
print ( b )
# 打印结果如下:
None
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值