python3基础篇(三)——运算符
1、阅读这篇文章我能学到什么?
这篇文章将为你介绍python3运算符的使用。
——如果你觉得这是一篇不错的博文,希望你能给一个小小的赞,感谢您的支持。
1 python3运算符
同其他语言一样,python3也具有多种运算符。python3的7类运算符如下:
运算符类别 | 运算符 |
---|---|
算术运算符 | +、-、*、/、%、**、// |
关系运算符 | ==、!=、>、<、>=、<= |
赋值运算符 | =、+=、-=、*=、/=、%=、**=、//=、:= |
位运算符 | &、|、^、~、<<、>> |
逻辑运算符 | and、or、not |
成员运算符 | in、not in |
身份运算符 | is、is not |
2 算术运算符
算术运算符 | 描述 |
---|---|
+ | 求和 |
- | 求差或求相反数 |
* | 求积 |
/ | 求商 |
% | 取模 |
** | 幂运算 |
// | 取整除,结果向下(指往x轴负方向靠拢) |
代码示例:
a = 10
b = 2
print(a + b)
print(a - b)
print(a * b)
print(a / b)
print(a % b) #取模
print(a ** b) #幂运算,10^2
print(a // b) #求商且结果取整
print(-a) #取a的负数
print(1 // 3) #向下取整
print(-1 // 3)
运行结果为:
12
8
20
5.0
0
100
5
-10
0
-1
3 关系运算符
关系运算符 | 描述 |
---|---|
== | 判等 |
!= | 判不等 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
代码示例:
a = 10
b = 2
print(a == b)
print(a != b)
print(a > b)
print(a < b)
print(a >= b)
print(a <= b)
运行结果为:
False
True
True
False
True
False
4 赋值运算符
赋值运算符 | 描述 |
---|---|
= | 直接赋值 |
+= | 加法赋值 |
-= | 减法赋值 |
*= | 乘法赋值 |
/= | 除法赋值 |
%= | 取模赋值 |
**= | 幂赋值 |
//= | 取整除赋值 |
:= | 海象赋值(python3.8新增特性),使得python3开始支持在表达式内赋值。(c/c++的=赋值符号就可以在表达式内赋值) |
代码示例:
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)
运行结果:
3
6
3
9
3.0
2
8
2
6
5 位运算符
位运算符 | 描述 |
---|---|
& | 按位与运算 |
| | 按位或运算 |
^ | 按位异或运算 |
~ | 按位取反运算 |
<< | 左移位运算 |
>> | 右移位运算 |
代码示例:
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))
运行结果:
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 |
代码示例:
#以下类型在python3中都判为逻辑假,其他为真
if 0: #整形0为假
print(True)
else:
print(False)
if 0.0: #浮点型0.0为假
print(True)
else:
print(False)
if None: #类似c/c++中的NULL,为假
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为真,时输出y的值
x = 1
y = 3
print(x and y) #x为真,输出y的值
x = 0
y = 2
print(x and y) #x为0是假,输出x
x = ()
y = 2
print(x and y) #x为空元组是假,输出x
#逻辑或
x = 1
y = 3
print(x or y) #x为1是真,输出x的值
x = 0
y = 2
print(x or y) #x为0是假,输出y的值
x = []
y = 2
print(x or y) #x为空列表是假,输出y的值
x = 0
print(not x) #x为0是假,输出True
x = 1
print(not x) #x为1是真,输出False
运算结果:
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 | 判定不存在其中 |
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) #判断字典中是否存在某个键値
运算结果:
True
True
True
True
8 身份运算符
身份运算符 | 描述 |
---|---|
is | 判断是否引用自一个对象 |
is not | 判断是否不是引用自同一个对象 |
说白了就是比较内存地址是否相同。==
用于比较变量内存中的值是否用,is
和is not
用于比较变量的内存地址是否相同。用id()
函数可以获取对象的地址。
'''
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)
运算结果:
1932188604144
140713282360800
140713282369152
1932218591312
140713282360800
1932188604144
1932188603952
True
False
False
True
9 运算符优先级
运算符优先级 | 描述 |
---|---|
** | 指数(最高优先级) |
~ + - | 这里的是一元运算符 |
* / % // | |
+ - | 二元运算符 |
>> << | 移位运算符 |
& | 位与 |
^ | | 位运算 |
>= <= > < | 比较运算 |
== != | 判等 |
= %= /= //= -= += *= **= | 赋值运算 |
is、is not | 身份运算符 |
in、not in | 成员运算符 |
and or not | 逻辑运算符(优先级最低) |
#建议尽量多加括号,不要太相信自己或别人对优先级的记忆,应尽量将表达式写得看起来没有歧义。
a = 1
b = 0
print(a + b << 1) #等同于(a + b) << 1
c = 2
c *= b + a
print(c) #等同于c = c * (b + a)
运算结果:
2
2
转载:https://blog.csdn.net/qq_42475711/article/details/105446156
查看评论