Python3基础篇(三)——运算符
前言:
阅读这篇文章我能学到什么?
这篇文章将为你介绍Python3运算符的使用。
1 Python3运算符
同其他语言一样,Python3也具有多种运算符。Python3的7类运算符如下:
运算符类别 |
运算符 |
算术运算符 |
+、-、*、/、%、**、// |
关系运算符 |
==、!=、>、<、>=、<= |
赋值运算符 |
=、+=、-=、*=、/=、%=、**=、//=、:= |
位运算符 |
&、|、^、~、<<、>> |
逻辑运算符 |
and、or、not |
成员运算符 |
in、not in |
身份运算符 |
is、is not |
2 算术运算符
算术运算符 |
描述 |
+ |
求和 |
- |
求差或求相反数 |
* |
求积 |
/ |
求商 |
% |
取模 |
** |
幂运算 |
代码示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| a = 10 b = 2
print(a + b) print(a - b) print(a * b) print(a / b) print(a % b) print(a ** b) print(a // b)
print(-a) print(1 // 3) print(-1 // 3)
|
运行结果为:
1 2 3 4 5 6 7 8 9 10
| 12 8 20 5.0 0 100 5 -10 0 -1
|
3 关系运算符
关系运算符 |
描述 |
== |
判等 |
!= |
判不等 |
> |
大于 |
< |
小于 |
>= |
大于等于 |
<= |
小于等于 |
代码示例:
1 2 3 4 5 6 7 8 9
| a = 10 b = 2
print(a == b) print(a != b) print(a > b) print(a < b) print(a >= b) print(a <= b)
|
运行结果为:
1 2 3 4 5 6
| False True True False True False
|
4 赋值运算符
赋值运算符 |
描述 |
= |
直接赋值 |
+= |
加法赋值 |
-= |
减法赋值 |
*= |
乘法赋值 |
/= |
除法赋值 |
%= |
取模赋值 |
**= |
幂赋值 |
//= |
取整除赋值 |
:= |
海象赋值(Python3.8新增特性),使得Python3开始支持在表达式内赋值。(c/c++的=赋值符号就可以在表达式内赋值) |
代码示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| a = 10 b = 3
a = b print(a) a += b print(a) a -= b print(a) a *= b print(a) a /= b print(a) a = 8 a %= b print(a) a **= b print(a) a //= b print(a)
c = (n := a) * b print(c)
|
运行结果:
5 位运算符
位运算符 |
描述 |
& |
按位与运算 |
| |
按位或运算 |
^ |
按位异或运算 |
~ |
按位取反运算 |
<< |
左移位运算 |
>> |
右移位运算 |
代码示例: |
|
1 2 3 4 5 6 7 8 9 10 11 12
| a = 10 b = 9
print(bin(a)) print(bin(b))
print(bin(a & b)) print(bin(a | b)) print(bin(a ^ b)) print(bin(~a)) print(bin(a << 1)) print(bin(b >> 1))
|
运行结果:
1 2 3 4 5 6 7 8
| 0b1010 0b1001 0b1000 0b1011 0b11 -0b1011 0b10100 0b100
|
解释下为什么10按位取反的二进制结果是-0b1011,是因为10是有符号数,其反码是负数,而负数在计算机中是以补码形式存储的的(补码就是反码再加1)。
6 逻辑运算符
逻辑运算符 |
描述 |
and |
逻辑与,x and y 当x为真时结果为y,当x为假时结果为x |
or |
逻辑或,x or y 当x为真时结果为x,当x为假时结果为y |
not |
逻辑非,not x 当x为真时结果为False,当x为假时结果为True |
代码示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
| if 0: print(True) else: print(False)
if 0.0: print(True) else: print(False)
if None: print(True) else: print(False)
str = "" if str: print(True) else: print(False)
Set = () if Set: print(True) else: print(False)
Tuple = [] if Tuple: print(True) else: print(False)
Set = set() if Set: print(True) else: print(False)
dic = {} if dic: print(True) else: print(False)
x = 1 y = 3 print(x and y)
x = 0 y = 2 print(x and y)
x = () y = 2 print(x and y)
x = 1 y = 3 print(x or y)
x = 0 y = 2 print(x or y)
x = [] y = 2 print(x or y)
x = 0 print(not x)
x = 1 print(not x)
|
运算结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| False False False False False False False False 3 0 () 1 2 2 True False
|
Python3中将几类判定为假:0
,0.0
,None
,""
,()
,[]
,set()
,{}
,其他为真。简单记忆就是数值为0时,None时,数据类型为空时为假。
7 成员运算符
成员运算符 |
描述 |
in |
判定存在其中 |
not in |
判定不存在其中 |
1 2 3 4 5 6 7 8 9
| Tuple = (1, 2, 3) List = [1, 2, 3] Set = {1, 2, 3} Dictionary = {"1":1, "2":2, "3":3}
print(1 in Tuple) print(1 in List) print(1 in Set) print("2" in Dictionary)
|
运算结果:
8 身份运算符
身份运算符 |
描述 |
is |
判断是否引用自一个对象 |
is not |
判断是否不是引用自同一个对象 |
说白了就是比较内存地址是否相同。== 用于比较变量内存中的值是否用,is 和is not 用于比较变量的内存地址是否相同。用id() 函数可以获取对象的地址。 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| ''' python解释器为了节省内存,进行了一些优化。小数字缓存池是事先创建好的(不管你用不用它都存在 ,当变量值为区间[-5, 256]内时,变量的地址都是固定的小整数缓存池中固定的地址。所以当多个变量的 值相同且位于小整数区间[-5, 256]区间内时,他们的地址都是固定相同的。 '''
a = -6 b = -5 c = 256 d = 257 print(id(a)) print(id(b)) print(id(c)) print(id(d))
x = -5 print(id(x)) x = -6 print(id(x)) x = -7 print(id(x))
a = 0 b = 0 c = 1 print(a is b) print(a is c) print(a is not a) print(a is not c)
|
运算结果:
1 2 3 4 5 6 7 8 9 10 11
| 1932188604144 140713282360800 140713282369152 1932218591312 140713282360800 1932188604144 1932188603952 True False False True
|
9 运算符优先级
运算符优先级 |
描述 |
** |
指数(最高优先级) |
~ + - |
这里的是一元运算符 |
* / % // |
|
+ - |
二元运算符 |
>> << |
移位运算符 |
& |
位与 |
^ | |
位运算 |
>= <= > < |
比较运算 |
== != |
判等 |
= %= /= //= -= += *= **= |
赋值运算 |
is、is not |
身份运算符 |
in、not in |
成员运算符 |
and or not |
逻辑运算符(优先级最低) |
1 2 3 4 5 6 7 8
| a = 1 b = 0 print(a + b << 1)
c = 2 c *= b + a print(c)
|
运算结果: