python基础03_深入学习Python中的运算符号

Python数据运算中的运算符详解

在我们实际问题中,离不开数据的运算,Python为我们提供了丰富的运算符号使用,包括一般的四则运算符、比较运算符、位运算符、逻辑运算符和赋值运算符。

下面将分类对各种运算符及使用进行学习,或有漏缺,敬请谅解。

据说,在python有变量赋值运算时,之所以有把运算符号放在’='号的左边的写法,是因为可以提高执行力和优先级,例如:

i += 1   # i = i + 1
m **= 3  # m = m ** 3

也不知道真的是这样吗……咱是小白。

算术运算符

包含四则运算符和其他运算

序号运算符号描述示例:a、b为任意两个数字
1+加法运算a + b
2-减法运算a - b
3*乘法运算a * b
4/除法运算a / b
5%取模:即两数整除之后的余数a % b
6**幂运算,类似于a[^b]的运算,a为底数b为指数a ** b
7//取整:两数相除后取运算结果的整数部分,也可以说是取小于商的最大整数(后边的说法对于负数取整尤其易于理解)a // b

输入代码,观看运行情况:

# 分别指定两个变量名为a和b,并赋予不同的数值
a = 5
b = 3
# 输出上算术运算符号使用后的结果
print('a + b=',a + b)
print('a - b=',a - b)
print('a * b=',a * b)
print('a / b=',a / b)
print('a % b=',a % b)
print('a ** b=',a ** b)
print('a // b=',a // b)

# 当浮点数参与运算会发生什么情况?
print('让其中的一个数变成小数后')
a = float(a)
# 输出带有小数的运算情况
print('a + b=',a + b)
print('a - b=',a - b)
print('a * b=',a * b)
print('a / b=',a / b)
print('a % b=',a % b)
print('a ** b=',a ** b)
print('a // b=',a // b)

运行结果:

a + b= 8
a - b= 2
a * b= 15
a / b= 1.6666666666666667
a % b= 2
a ** b= 125
a // b= 1
让其中的一个数变成小数后
a + b= 8.0
a - b= 2.0
a * b= 15.0
a / b= 1.6666666666666667
a % b= 2.0
a ** b= 125.0
a // b= 1.0

这是我们会发现,

  • 一旦运算中有浮点型数据参与,那么返回的结果也会是浮点型数
  • 小数运算中,一般运算结果的位数是有限的,程序会自己作一些处理,这会导致在某些特别要求精度的计算中,计算结果可能出现误差
# 让7去除以3看看
print('7/3=',7 / 3)
7/3= 2.3333333333333335  #最后一个数字是5与我们想象的四舍五入不大一样

比较运算符

通过不等号’大于’、‘小于’、‘大于或等于’……等,对符号两边的数值或者表达式结果进行比较,也可以是变量,最终返回真假值,可看作是一个命题的逻辑判断或布尔运算

序号运算符号描述示例,有两个任意数a和b
1==等于,于普通概念的等号一样a == b
2!=不等于a != b
3>大于a > b
4<小于a < b
5>=大于或等于a >= b
6<=小于或等于a <= b

输入代码运行

# 分别指定两个变量名为a和b,并赋予不同的数值
a = 7
b = 3
# 输出比较运算符号使用后的结果
print('a == b:',a == b)
print('a != b:',a != b)
print('a > b:',a > b)
print('a < b:',a < b)
print('a >= b:',a >= b)
print('a <= b:',a <= b)

# 当浮点数参与运算会发生什么情况?
print('让其中的一个数变成小数后')
c = 7.0
# 输出带有小数的运算情况
print(a == c)

运行情况:

a == b: False
a != b: True
a > b: True
a < b: False
a >= b: True
a <= b: False
让其中的一个数变成小数后
True
  • 可见在做逻辑命题判断,为真时返回True,为假时返回False;
  • 数字为浮点型数据时不影响其数值大小,7 == 7.0 为True

赋值运算符

Python中,变量无须定义,可以直接使用,即在使用时,可以直接把基本赋值运算符“=”右边的值赋给左边的变量,也可以进行某些运算后再赋值给左边的变量。

Python中的赋值运算符有两种形式:

  1. 基本的赋值运算符,即单个“=”,其把右边的值或运算结果赋给左边的变量;

  2. 复合的赋值运算符,即由算术运算符和“=”组合成的赋值运算符,其兼有运算和赋值的功能,如+=,相当于左边的操作数加上右边的操作数后,再赋值给左边的操作数。

序号运算符描述以x为变量示例
1=让x的值为2x = 2
2+=让x值为x + 2x += 2
3-=让x值为x - 2x -= 2
4*=让x值为x * 2x *= 2
5/=让x值为x / 2x /= 2
6%=让x值为x % 2x %= 2
7**=让x值为x ** 2x **= 2
8//=让x值为x // 2x //= 2

输入代码运行

x = 2
print(x) # x的值为2
x += 2
print(x) # x的值为4
x -= 2
print(x) # x的值为2
x *= 2
print(x) # x的值为4
x /= 2
print(x) # x的值为2.0
x %= 2
print(x) # x的值为0.0
# 重新赋值x=2,之所以重新赋值x是因为之前的x值运算后为0,而0参与后边运算都为0不容易看出运行结果
x = 2
x **= 2
print(x) # x的值为4
x //= 2
print(x) # x的值为2

运行结果:

2
4
2
4
2.0
0.0
4
2
  • 负数在取整时,需要注意取到的不是小数点左边的负整数值,而是距离计算结果最近的左边那个负整数,比如 -13/3=-4.3333……,这时候对-4.33333……取整得到的数不是-4而是-5。(我们取的整数是比商小的最大整数)
-13//3  #执行
-5      #返回-5 
  • 赋值运算是把右边值赋予左边变量,所以顺序是从右到左的。

逻辑运算符

逻辑运算符是进行逻辑判断时使用的符号,一般我们说由逻辑运算符构成的语句是一句联合语句,如果设定两个单命题分别为p和q的话,那么有三种语式:

  • p and q
  • p or q
  • not p 或 not q

p、q可以是数值和字符串,也可以是表达式和函数

序号运算符号描述
1andp and q,如果p和q都为真时,返回True,其他情况返回False。
2orp and q,如果p和q都为假时,返回False,其他情况返回True。
3notnot p 或 not q,返回p或q的反向值,即原命题为真,返回False,原命题为假,返回True。

示例运行及返回值列表

序号指令前后判断值逻辑判断结果返回值
1print(2 < 3 and 3 < 5)真真TrueTrue表达式 and 表达式
7print(2 < 3 and 5)真真True5表达式 and 非零
8print(5 and 2 < 3 )真真TrueTrue非零 and 表达式
11print(3 and 5)真真True5非零 and 非零
12print(5 and 3)真真True3非零 and 非零
15print('abc' and '我的天')真真True我的天字符 and 字符
16print('我的天' and 'abc')真真Trueabc字符 and 字符
6print(3 > 5 and 0)假假FalseFalse表达式 and 0
5print(0 and 3 > 5)假假False00 and 表达式
3print(5 and 3 > 5)真假FalseFalse非零 and 表达式
2print(2 < 3 and 3 > 5)真假FalseFalse表达式 and 表达式
9print(2 < 3 and 0)真假False0表达式 and 0
13print(5 and 0)真假False0非零 and 0
18print('abc' and '')真假False字符 and 空
4print(3 > 5 and 5)假真FalseFalse表达式 and 非零
17print('' and 'abc')假真False空 and 字符
14print(0 and 5)假真False00 and 非零
10print(0 and 2 < 3 )假真False00 and 表达式

通过上述对比,大概可以知道,在and联句中,有四种组成判断,同样的or也是,具体的取值情况如下:

and的取值
  • 真真:返回and右侧值
  • 假假:返回and左侧值
  • 真假:返回其中的假值
  • 假真:返回其中的假值

看似复杂,其实是python在逻辑用语判断时,采用了一个称为“短路问题”的原理,大概如下图:

在这里插入图片描述

or的取值
  • 假假:返回or右侧值
  • 真真:返回or左侧值
  • 真假:返回其中的真值
  • 假真:返回其中的真值

or也存在短路问题:

在这里插入图片描述

not的取值

not中,只有一种情况,即返回与原值相反的布尔值

特别强调在and、or和not的使用中一定要注意
  • True:代表真,代表所有非空字符串,代表所有非零数
  • False:代表假,代表空字符串,代表数值0
  • True和False的本质是数字0和1,所以可以把两者当作数值进行计算

位运算符

主要是一些二级制的计算符号,在一些基础网络配置和计算中经常会用到,也比较简单

序号运算符描述
1& 与运算二进制计算中,参加运算的两个二进制数,对位比较,只有1对1得1,其他为0
2| 或运算二进制计算中,参加运算的两个二进制数,对位比较,只有0对0得0,其他为1
3^ 异或运算二进制计算中,参加运算的两个二进制数,对应的两个二进制位不同时,结果为1,否则为0
41~ 取反运算该运算是单操作数运算符,即其只需要一个操作数参与运算。运算时,二进制数上的每位取反,即1变为0, 0变为1
5<< 左移运算其形式为:m<<n。按位左移运算,m对应的二进制数的每位向左移动n位,后面补0,简单说也就是说,一个整数左移n位相当于这个数 m × 22
6>> 右移运算其形式为:m >> n。即m对应的二进制数每位向右移动n位,移出的二进制数字去掉,最左边空出的变为0。即每向右移动1位,相当于原数除以2,只保留整数部分;移动n位,相当于原数除以23,只保留整数部分。

代码示例:(略)

运算符的优先级

这是一个比较烦人的问题,一般遵循的规律我还没学到,只是大概了解,基本上用到时按习惯先看看结果是否符合,不符合在通过()进行调整

以下列出的运算符优先级:从高到低

序号运算符描述
1**幂运算(优先级最高)
2~按位取反
3* , / , %, //乘、除、取余、取整
4+ , -加、减
5>> , <<右移、左移
6&按位与
7^ ,|按位异或、按位或
8< , > , <= , >=小于、大于、小于或等于、大于或等于
9== , !=等于、不等于
10= , += , -= , *= , /= , **= , %= , //=赋值运算符
11is , is not是、不是
12in , not in在、不在
13not , and , or逻辑运算符

标准运算符替代函数

关于此内容,可以参考:

operator — 标准运算符替代函数 — Python 3.11.4 文档

取反码运算,涉及到数字在计算机中的存储形式,在计算机中,最高位为符号位,符号位为0时表示正数,符号位为1时表示负数。

数字在计算机中是以补码的形式进行存储的,整数的补码与原码相同,负数的补码是在原码的基础上除符号位外,按位取反后,再加1.

比如:当我们计算~10的值时

先把10转为二进制编码:01010

然后取反运算:10101

这时由于最高位数为1,这代表该数是个负数,因为负数在计算机中以补码形式存储,

要得到原码(先减1,再按位反)为:11011

最后得到结果:-11

<<:按位左移运算符

其形式为:m<<n

按位左移运算,m对应的二进制数的每位向左移动n位,后面补0.

如10的二进制数 1010 向左移动两位后为:10 1000,其对应的十进制数为:40.

5的二进制数:0101,向左移动两位后为:1 0100,其对应的十进制数为:20

>>:按位右移运算符

其形式为:m >> n

即m对应的二进制数每位向右移动n位,移出的二进制数字去掉,最左边空出的变为0.

后取反运算:10101

这时由于最高位数为1,这代表该数是个负数,因为负数在计算机中以补码形式存储,

要得到原码(先减1,再按位反)为:11011

最后得到结果:-11

<<:按位左移运算符

其形式为:m<<n

按位左移运算,m对应的二进制数的每位向左移动n位,后面补0.

如10的二进制数 1010 向左移动两位后为:10 1000,其对应的十进制数为:40.

5的二进制数:0101,向左移动两位后为:1 0100,其对应的十进制数为:20

>>:按位右移运算符

其形式为:m >> n

即m对应的二进制数每位向右移动n位,移出的二进制数字去掉,最左边空出的变为0.

10的二进制 1010 向右移动1位为:0101,即变为十进制的5;再移动1位变为0010,变为2,再移动1位变为0001,变为1,再移动就一直为0了。


  1. **取反码运算的一些补充 ** ↩︎

  2. n ↩︎

  3. n ↩︎

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值