Python基础 2》运算符
文章目录
- 一、算术运算符
- 二、赋值运算符
- 三、比较运算符
- 四、逻辑运算符
- 五、身份运算符
- 六、成员运算符
- 七、位运算符
运算符的优先级:括号 > 幂运算 > 单目运算 > 乘除 > 加减 > 比较 > 逻辑非与或 > 赋值。
推荐资料:
- https://www.w3school.com.cn/python/python_operators.asp
运算符用于对变量和值执行操作。
python的运算符大致分为以下几种:
- 算术运算符
- 赋值运算符
- 比较运算符
- 逻辑运算符
- 身份运算符
- 成员运算符
- 位运算符
一、算术运算符
算术运算符与数值一起使用来执行常见的数学运算(+、-、*、/、%、**、//)
运算符 | 名称 | 实例 |
---|---|---|
+ | 加 | x + y |
- | 减 | x - y |
* | 乘 | x * y |
/ | 除 | x / y |
% | 取余(取模) | x % y |
** | 幂 | x ** y |
// | 取整除(向下取整) | x // y |
# 算术运算符
# +、-、*、/、%、**、//
x = 3
y = 2
print(x + y) # 5
print(x - y) # 1
print(x * y) # 6
print(x / y) # 1.5
print(x % y) # 1
print(x ** y) # 3的平方=9
print(x // y) # 向下取整
二、赋值运算符
主要用于变量的赋值操作(=、+=、-=、*=、/=、%=、//=、**=、&=、|=、^=、>>=、<<=)
运算符 | 描述 | 实例 | 等同于 |
---|---|---|---|
= | 赋值运算 | x = 5 | x = 5 |
+= | 加法赋值运算 | x += 3 | x = x + 3 |
-= | 减法赋值运算 | x -= 3 | x = x - 3 |
*= | 乘法赋值运算 | x *= 3 | x = x * 3 |
/= | 除法赋值运算 | x /= 3 | x = x / 3 |
%= | 取余赋值运算 | x %= 3 | x = x % 3 |
//= | 整除赋值运算 | x //= 3 | x = x // 3 |
**= | 幂赋值运算 | x **= 3 | x = x ** 3 |
&= | 与赋值运算 | x &= 3 | x = x & 3 |
^= | 异或赋值运算 | x ^= 3 | x = x ^ 3 |
>>= | 右移赋值运算 | x >>= 3 | x = x >> 3 |
<<= | 左移赋值运算 | x <<= 3 | x = x << 3 |
案例代码:
# 赋值运算符
# 主要用于变量的赋值操作(=、+=、-=、*=、/=、%=、//=、**=、&=、|=、^=、>>=、<<=)
# += 加法赋值运算
a = 5
a += 3
print("a的值是:", a) # a = a + 3 8
# -= 减法赋值运算
b = 3
b -= 4
print('b的值是:', b) # b = b - 4 -1
# *= 乘法赋值运算
c = 5
c *= 10
print('c的值是:', c) # c = c * 10 50
# /= 除法赋值运算
d = 8
d /= 2
print('d的值是:', d) # d = d / 2 4
# %= 取余赋值运算
e = 10
e %= 3
print('e的值是:', e) # e = e % 3 1
# **= 幂赋值运算
f = 10
f **= 3
print('f的值是:', f) # f = f ** 3 1000
# //= 整除赋值运算
g = 20
g //= 3
print('g的值是:', g) # g = g // 3 6
# &= 与赋值运算
h = 5
h &= 3
print('h的值是:', h) # h = h & 3 1
# |= 或赋值运算
i = 5
i |= 3
print('i的值是:', i) # i = i | 3 7
# ^= 异或赋值运算
j = 5
j ^= 3
print('j的值是:', j) # j = j ^ 3 6
# >>= 右移赋值运算
k = 5
k >>= 3
print('k的值是:', k) # k = k >> 3 0 [0101 => 0000 = 0]
print(k) #
# <<= 左移赋值运算
l = 5
l <<= 3
print('l的值是:', l) # l = l << 3 40 [0101 => 0010 1000 => 32+8 = 40]# 特殊的赋值运算
# 【1】链式赋值
a = b = c = 10
print("a、b、c的值是:", a, b, c) # 10 10 10# [2】交叉赋值
a = 10
b = 20
print("a、b的值是:", a, b) # 10 20
a, b = b, a
print("a、b的值是:", a, b) # 20 10# [3】解包赋值
num_list = [1, 2, 3]
a, b, c = num_list
print("a、b、c的值是:", a, b, c) # 1 2 3# 列表中的元素个数不够前面的变量解压的时候就会报错
# a, b, c, d = num_list
# print(d) # ValueError: not enough values to unpack (expected 4, got 3)# 如果列表中的元素多余位置变量的时候也会报错
# a, b = num_list
# print(a)
# print(b) # ValueError: too many values to unpack (expected 2)# 可以用下划线来存储不需要的变量值
# a, b, _ = num_list
# print(a)
# print(b)
三、比较运算符
用于比较两个值(= =、!= 、>、<、>=、<=)
运算符 | 名称 | 实例 |
---|---|---|
= = | 等于 | x = = y |
! = | 不等于 | x ! = y |
> | 大于 | x > y |
< | 小于 | x < y |
> = | 大于等于 | x > = y |
< = | 小于等于 | x < = y |
案例代码:
# 比较运算符
# 用于比较两个值(==、!= 、>、<、>=、<=)
print(1 == 1) # True
print(1 != 1) # False
print(1 > 2) # False
print(1 < 2) # True
print(1 >= 2) # False
print(1 <= 2) # True
四、逻辑运算符
逻辑运算符一般用于组合语句中。(and、or、not)
运算符 | 描述 | 实例 |
---|---|---|
and | 如果两个语句都为真,则返回True。 | x > 3 and x < 10 |
or | 如果其中一个语句为真,则返回True。 | x > 3 or x < 4 |
not | 反转结果,如果结果为true,则返回false | not(x > 3 and x < 10) |
案例代码:
# 逻辑运算符一般用于组合语句中。(and、or、not)
# 与或非
# 与 : 两者都必须 and
# 或 : 两者任一 or
# 非 : 取反 not
a = 10
b = -10
print(a > 0 and b > 0)
print(a > 0 or b < 0)
print(a > 0 or b > 0)
# a < 0 False not False ==> True
print(not a < 0)# 连续多个and
print(10 > 0 and 5 > 0 or 3 < 0) # True
print(10 > 0 or 5 > 0 or 3 < 0) # True# 提高运算的优先级 对优先的部分加 ()# 运算优先级 : not > and > or
"""
假 and 真 or 假 and 真 or 假
假 or 假 or 假
假(False)
"""
print(3 > 4 and 4 > 3 or 1 == 3 and 'x' == 'x' or 3 > 3) # False
"""
真 and (真 or 假) and (真 or 假)
真 and 真 and 真
真(True)
"""
print(not 3 > 4 and (4 > 3 or 1 == 3) and ('x' == 'x' or 3 > 3)) # True
五、身份运算符
身份运算符用于比较对象,不是比较是否相等,而是判断它们是否指向同一个内存位置。(is、is not)
运算符 | 描述 | 实例 |
---|---|---|
is | 如果两个变量是同一个对象(指向同一个内存地址),则返回True。 | x is y |
is not | 如果两个变量不是同一个对象(不指向同一个内存地址),则返回True、 | x is not y |
案例代码:
# 身份运算符
# 比较对象是否指向同一个内存地址(is、is not)
# 由于列表是可变数据,因此即便值相等,所指向的内存地址也不一样,因此返回为False
x = [1, 2, 3]
y = [1, 2, 3]
print(x, id(x)) # [1, 2, 3] 3147884019840
print(y, id(y)) # [1, 2, 3] 3147884018816
print(x is y) # False
print(x is not y) # True
# 如果是不可变数据的话,对象所指向的内存地址是一致的,因此返回为True
x = 1
y = 1
print(x, id(x)) # 1 140711727033264
print(y, id(y)) # 1 140711727033264
print(x is y) # True
print(x is not y) # False# 【== 和 is 的区别】,针对于可变数据类型就很明显。
# == 比较的是值 两个值是否相等
# is 比较的是值 和 内存地址是否相等
l1 = [1, 2, 3]
l2 = [1, 2, 3]
print("id(l1):", id(l1))
print("id(l2):", id(l2))
print("l1 == l2:", l1 == l2)
print("l1 is l2:", l1 is l2)
六、成员运算符
成员运算符用于测试数据是否在对象中出现。(in、not in)
运算符 | 描述 | 使用形式 | 实例 |
---|---|---|---|
in | 如果对象存在于指定数据中(例如:列表、字符串)中,则返回True。 | x in y | ‘a’ in ‘apply’ 或者 4 in [1, 2, 3] |
not in | 如果对象不存在于指定数据中(例如:列表、字符串)中,则返回True。 | x not y | ‘a’ not in ‘apply’ 或者 4 not in [1, 2, 3] |
案例代码:
# 成员运算符
# 成员运算符用于测试数据是否在对象中出现。(in、not in)
# 案例1:列表
x = 4
y = [1, 2, 3]
print(x in y) # False
print(x not in y) # True
# 案例2:字符串
x = 'a'
y = 'apple'
print(x in y) # True
print(x not in y) # False
七、位运算符
位运算符用于比较
二进制
数据(&、|、^、~、<<、>>)Python 位运算按照数据在内存中的二进制位(Bit)进行操作,它一般用于底层开发(算法设计、驱动、图像处理、单片机等),在应用层开发(Web 开发、Linux 运维等)中并不常见。
想详细了解:
- Python位运算符详解
- 负数的二进制表示方法(正数:原码、负数:补码)
总结:
负数的左移右移,先获取补码,然后进行移位操作,最后在获取补码+1,前面添加符号
运算符 | 描述 | 使用形式 | 实例 |
---|---|---|---|
& | 按位与(只有参与&运算的两个位都为 1 时,结果才为 1,否则为 0。)1&1为 1,0&0为 0,1&0为 0 | x & y | 4 & 5 |
^ | 按位异或(参与运算的两个二进制位不同时,结果为 1,相同时结果为 0)0^1为 1,0^0为 0,1^1为 0 | x ^ y | 4 ^ 5 |
~ | 按位取反(反转所有位。作用是对参与运算的二进制位取反。) | ~x | ~8 或 ~-128 |
<< | 按位左移(Python 左移运算符<<用来把操作数的各个二进制位全部左移若干位,高位丢弃,低位补 0。) | x << y | 9 << 3 或 -9 << 3 |
>> | 按位右移(Python 右移运算符>>用来把操作数的各个二进制位全部右移若干位,低位丢弃,高位补 0 或 1。 如果数据的最高位是 0,那么就补 0;如果最高位是 1,那么就补 1) | x >> y | 9 >> 3 或 -9 >> 3 |
案例代码:
# 位运算符
# 位运算符用于比较`二进制`数据(&、|、^、~、<<、>>)
"""正数:原码、负数:补码原码:一个正数,按照绝对值大小转换成的二进制数;一个负数按照绝对值大小转换成的二进制数,然后最高位补1,称为原码。反码:正数的反码与原码相同,负数的反码为对该数的原码除符号位外各位取反[每一位取反(除符号位)]。补码:正数的补码与原码相同,负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1.
"""
print(4 & 5) # 100 & 101 = 100 再转为10进制为4
print(4 | 5) # 100 | 101 = 101 再转为10进制为5
print(4 ^ 5) # 100 ^ 101 = 001 再转为10进制为1
print(~8) # 正数=》负数-1 -9 【取反,补码取反后+1, 1000-> 0111+1 -> 1000 + 1 = 9, 取反变符号-9】
print(~-128) # 负数=》正数-1 127
print(~-66) # 01000010【66】 ->1011 1101 【-65】 -> 1011 1110【-66】
print(9 << 3) # 1001 => 0100 1000 = 64+8 = 72
print(-9 << 3) # 0111 => 1011 1000【负数】 => 0100 0111【71】+ 1【正数】 = -72
print(9 >> 3) # 1001 => 0001 = 1
print(-9 >> 3) # 0111 => 1110【负数】 => 0001 + 1【正数】 => 0010 => 2 => -2