我们在数学中,经常使用数学运算符进行一系列的数学运算、使用比较运算符进行比较大小的操作等,那么同理,在Python语言中也支持很多运算符,包括算术运算符、比较运算符、赋值运算符、逻辑运算符、成员运算符、位运算符、身份运算符等,接下来在上篇,我们先来讲解算术运算符、比较运算符、赋值运算符、逻辑运算符。
一、常用运算符讲解
- 算术运算符
Python中的算术运算符非常丰富,除了大家最为熟悉的+(加)、-(减)、*(乘)、/(除)
外,还有//(整除)、%(取模)、**(幂运算)
,下面的例子为大家展示了算术运算符的使用。
print(f'加法运算:{321 + 123}')
print(f'减法运算:{321 - 123}')
print(f'乘法运算:{321 * 123}')
print(f'除法运算:{321 / 123}')
print(f'整除运算:{321 // 123}')
print(f'取模运算:{321 % 123}')
print(f'幂运算:{321 ** 123}')
其中,你需要记住的是:
- 如果是除法运算,结果永远是浮点型,例如
6 / 3 = 2.0
; - 如果是整除运算,结果永远为整型,并且向小取整,例如
5 // 2 = 2
; - 如果是取模运算,取模的意思就是求余数,例如
5 % 2 == 1
得到的就是 5 除以 2 之后的余数 1; - 如果是幂运算,就当做数学一样,无非就是类似于
4 的 2 次幂为 16
、4 的 0.5 次幂为 2.0
等。
以下是上面运算的输出结果:
- 比较运算符
看名字大家也能够理解这是专门用来做数据比较的,那么我们看一下比较运算符具体包含哪些符号:==(等等于)、!=(不等于)、<(小于)、>(大于)、<=(小于等于)、>=(大于等于)
。其中,要明白比较之后得到的结果是什么,例如我们说 1 > 2 是错的,那么对与错(真与假)用什么表示?前面文章提到过 Python 中的数据类型,其中布尔类型(bool)中的 True 和 False 便是用来表示对错(真假)的,所以数据比较大小的结果便是True 或者 False ,大家请看下面的例子以及对应的结果。
print(1 == 2) # 结果为:False
print(1 != 2) # 结果为:True
print(1 < 2) # 结果为:True
print(1 > 2) # 结果为:False
print(1 <= 2) # 结果为:True
print(1 >= 2) # 结果为:False
我们再稍微补充一点:
- 在 Python 中 == 的用作判断数据是否相等的,而不是 = ,千万记住;
- <= 表示的是小于或等于,是或者的关系;同理,>=也是。
- 赋值运算符
赋值运算符是用于给变量赋值的,一个变量存在就意味着这个变量有对应的数据,那么变量得到数据的过程就是赋值;此外,一个变量不可能永远的保存一个数据而不变,此时修改变量的值也是使用赋值的方式。以下便是赋值运算符涉及的符号:=(等于)、+=(加等于)、-=(减等于)、*=(乘等于)、/=(除等于)、//=(整除等于)、%=(取模等于)、**=(幂运算等于)、:=(海象运算符)
。其中,我们发现绝大部分赋值运算符就是在算术运算符的基础上添加了一个等号,所以相信大家在学习赋值运算符的时候是非常 easy 的,下面的例子展示了赋值运算符的使用方式,但是请先记住这样几点赋值运算符的计算准则:
- 所有的赋值运算符最终目的是给变量赋值。
- 如果某变量原来不存在,那么只能使用 =(等号)进行变量的创建与赋值。
- 赋值符号左边必须是变量,右边可以是任何有结果的表达式。
- 做赋值运算时,最后才给变量赋值(涉及到运算符的优先级,我们稍后讲解)。
a = 10
b = 3
a += b
a *= a + 2
a %= 2
print(a) # 算一下这里会输出什么?
这里的输出结果为 1,请看解释:a、 b 最开始被创建后赋值为 10 和 3,然后 a += b 如果不理解,可以尝试着转化为 a = a + b,此时 a 被改为 13,然后 a *= a + 2,你转化为 a = a * (a + 2),此时 a 被改为 195,最终 a %= 2,转化为 a = a % 2,最终 a 为 1。
以上是常规的赋值运算符使用方式讲解,我们再讲一个非常规的运算符:海象运算符:
海象运算符是 Python 3.8 版本推出的一个新的赋值运算符,它的作用在于某些场景能够简化代码,看例子:
- 正常情况下,一个变量和一个数据进行运算,首先我们要保证这个变量是被创建赋值之后才能运算
a = 20
print(f'a > 2 的结果为:{a > 2},此时 a 的值为{a}')
# 输出结果为:a > 2 的结果为:True,此时 a 的值为20
- 如果某个变量不存在就参与运算,就会出现这样的情况
print(f'b > 2 的结果为:{b > 2},此时 b 的值为{b}')
# 这一行代码报错,提示变量 b 未定义:NameError: name 'b' is not defined
- 海象运算符解决的痛点是:创建某个变量并赋值的同时还能参与运算,这是其他赋值运算符做不到的,但是看例子,这里换了一种格式化字符串的风格,海象运算符暂时还没办法与 f-字符串语法一起使用。
print('c > 2 的结果为:{},此时 c 的值为{}'.format((c := 10) > 2, c))
# # 输出结果为:c > 2 的结果为:True,此时 c 的值为10
以上便是全部的赋值运算符的内容。
- 逻辑运算符
在 Python中,逻辑运算符一般涉及到多条件之间的联结,多个小条件组成一个大条件。逻辑运算符有以下几个:and(逻辑与运算)、or(逻辑或运算)、not(逻辑非运算)
,我们依次来解释并举例应用这些符号。
- and(逻辑与运算)
and 字面意思是“并且”,在使用时用于联结两个条件。
and 的计算逻辑是这样的:如果两个条件的结果都为 True,那么运算的结果才为 True; 只要有一个条件的结果为 False,运算结果就为 False;其中还涉及一个中断机制(短路操作),如果 and 左边条件的结果为 False,直接判定最终结果为 False,不会再计算 and 右侧条件的结果。
print(1 < 2 and 2 < 3) # 结果为:True
print(1 > 2 and 2 < 3) # 结果为:False
print(1 > 2 and 2 > 3) # 结果为:False
- or(逻辑或运算)
or 字面意思是“或者”,在使用时用于联结两个条件。
or 的计算逻辑是这样的:如果两个条件的结果都为 False,那么运算的结果才为 False; 只要有一个条件的结果为 True,运算结果就为 True;其中还涉及一个中断机制(短路操作),如果 or 左边条件的结果为 True,直接判定最终结果为 True,不会再计算 or 右侧条件的结果,or 正好与 and 相反。
print(1 < 2 or 2 < 3) # 结果为:True
print(1 > 2 or 2 < 3) # 结果为:True
print(1 > 2 or 2 > 3) # 结果为:False
- not(逻辑非运算)
not 字面意思是“相反”,在使用时用于放在条件前,计算逻辑是对结果取反。
print(not 1 < 2 or 2 < 3) # 结果为:True
print(not (1 < 2 or 2 < 3)) # 结果为:False
二、常用运算符优先级
本篇我们学了一些 Python 最常用运算符,但是目前还没怎么涉及到运算符的组合使用,如果一段代码同时出现了多种运算符,应该怎么去计算呢?此时就涉及到运算符的先后执行顺序,我们常常叫做运算符的优先级。
- 本章讲的运算符优先级顺序为:算术运算符 > 比较运算符 > 逻辑运算符 > 赋值运算符
- 算术运算符中,保持与数学一样的优先级逻辑:幂运算 > 乘、除、整除、取模 > 加、减
- 如果某个条件有小括号(),那么优先计算小括号里面的
光看文字描述,不足以完全理解,再搭配程序使大家融会贯通,接下来请看三行程序看懂常用运算符之间的优先级:
print(x := 2 + 2 > 4 or 5 < 6, x) # 输出结果为:True 、 True
print((x := 2) + 2 == 4 or 5 < 4, x) # 输出结果为:True 、 2
print((x := 2 + 2) == 4 or 5 < 5, x) # 输出结果为:True 、 4
三、本章小节
本小节我们学的运算符还是挺多的,针对这些运算符,给大家提几点建议,一定要多练,放在上篇讲的都是特别重要的常用的运算符,希望大家每天都能进步一点点!