当前位置: 首页 > news >正文

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 = 5x = 5
+=加法赋值运算x += 3x = x + 3
-=减法赋值运算x -= 3x = x - 3
*=乘法赋值运算x *= 3x = x * 3
/=除法赋值运算x /= 3x = x / 3
%=取余赋值运算x %= 3x = x % 3
//=整除赋值运算x //= 3x = x // 3
**=幂赋值运算x **= 3x = x ** 3
&=与赋值运算x &= 3x = x & 3
^=异或赋值运算x ^= 3x = x ^ 3
>>=右移赋值运算x >>= 3x = x >> 3
<<=左移赋值运算x <<= 3x = 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,则返回falsenot(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为 0x & y4 & 5
^按位异或(参与运算的两个二进制位不同时,结果为 1,相同时结果为 0)0^1为 1,0^0为 0,1^1为 0x ^ y4 ^ 5
~按位取反(反转所有位。作用是对参与运算的二进制位取反。)~x~8 或 ~-128
<<按位左移(Python 左移运算符<<用来把操作数的各个二进制位全部左移若干位,高位丢弃,低位补 0。)x << y9 << 3 或 -9 << 3
>>按位右移(Python 右移运算符>>用来把操作数的各个二进制位全部右移若干位,低位丢弃,高位补 0 或 1。 如果数据的最高位是 0,那么就补 0;如果最高位是 1,那么就补 1)x >> y9 >> 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

http://www.dtcms.com/a/390072.html

相关文章:

  • docker 部署 sftp
  • 数字ic笔试
  • 武汉火影数字|数字展厅设计制作:多媒体数字内容打造
  • LLM模型的参数量估计
  • STM32H743-学习HAL库
  • 一键防范假票入账-发票识别接口-发票查验接口-信息提取
  • RTEMS 控制台驱动
  • flutter在列表页面中通过监听列表滑动偏移量控制页面中某个控件的透明度
  • linux上升级nginx版本
  • WINCC结构变量/公共弹窗
  • 信息化项目验收计划方案书
  • 1.数据库概述和三种主要控制语言
  • 找到nohup启动的程序并杀死
  • 电磁干扰EMI (Electromagnetic Interference)是什么?
  • python提取域名
  • PR工具timing report中setup time的计算过程
  • 低延迟垃圾收集器:挑战“不可能三角”
  • 【测试】发版测试准入准出标准
  • 第一部分:HTML
  • 贪心算法应用:带权任务间隔调度问题详解
  • 视频监控大数据建模分析
  • IP的重要性
  • 远程访问管理爱快路由器
  • 算法 --- 优先级队列(堆)
  • Kindle出现电池感叹号图标和黄灯闪烁怎么办?
  • 摄像头模块在无人机上的应用
  • 深度学习篇GRU---LSTM和RNN的折中方案
  • Doris聚合表和物化视图选型对比
  • 互补色颜色对应的RGB
  • Python定义UDS诊断服务(8):SecurityAccess(0x27)