9 运算符
9.1 运算符的概念
运算符用于执行程序代码运算,会针对一个以上操作数项目进行运算,以 2+3 为例,操作数为2和3,运算符是“+”。
9.2 运算符的分类
- 算数运算符
- 赋值运算符
- 比较运算符(关系运算符)
- 逻辑运算符
- 条件运算符(三元运算符)
9.2.1 算术运算符
- 加法运算符 +
- 减法运算符 -
- 乘法运算符 *
- 除法运算符 /(总会返回一个浮点数类型数据)
- 整除 //(总会返回一个整形数据)
- 取模%(返回两数相除的余数)
- 幂运算 **
9.2.2 赋值运算符
- 以"="形式存在,如 a=1 表示将整数1付给变量a。
- 赋值运算符存在一种特殊写法,如 a += 3 与 a = a + 3完全等价。同理,也存在 a /= 3,a *= 3等记法。
a = 0
a + = 3
print(a)
a = 0
a = a + 3
print(a)
上述两段代码的实现效果是完全相同的。
9.2.3 比较运算符
- 比较运算符用于比较两个值之间的关系,总是返回一个布尔值,关系成立则返回True,反之则返回False
比较运算符 | 功能说明 |
---|---|
> | 比较左侧值是否大于右侧值 |
< | 比较左侧值是否小于右侧值 |
>= | 比较左侧值是否大于等于右侧值 |
<= | 比较左侧值是否小于等于右侧值 |
== | 比较两个对象的值是否相等 |
!= | 比较两个对象的值是否不相等 |
is | 比较两个对象是否是同一个对象,比较的依据是对象的id |
is not | 比较两个对象是否不是同一个对象,比较的依据是对象的id |
下面介绍一下字符串之间比较大小的准则
- 有如下的代码段
print('2'>'1')
print('2'>'11')
print('a'>'b')
print('aa'>'ab')
- 上段代码的运行结果如下图所示
1.通过第一行和第三行的运行结果我们不难发现字符串的比较实际上就是字符串所对应的ASCII码的比较。'2’的ASCII码为50,'1’的ASCII码为49;'a’的ASCII码的值为97,'b’的ASCII码为98,则自然可得到以上结果。要查看一个字符的ASCII码,调用函数 ord() 即可。
2. 我们可以发现Python在比较字符串时采取逐个比较的策略,即按照1中规则将左右两个字符串的首个字符进行比较,若已经比较出大小则不再进行后续字符的比较,否则两边都取下一个字符进行再一次的比较,以此类推直至比较出大小为止,最后得出的两个字符间的大小关系即为两个字符串间的大小关系。
9.2.4 逻辑运算符
not 逻辑非
- 可对布尔值进行取反操作,即将True变为False,将False变为True
and 逻辑与
- 可对符号两侧的值进行与运算,如 a and b的结果如下图所示
a | b | 结果 |
---|---|---|
True | True | True |
True | False | False |
False | True | False |
False | False | False |
可见只有a,b同时为True时,表达式结果才为True,否则为False。
逻辑或
- 可对符号两侧的值进行或运算,a or b的运算结果如下图所示
a | b | 结果 |
---|---|---|
True | True | True |
True | False | True |
False | True | True |
False | False | False |
可见a,b只要有一个为True,则表达式的结果为True,只有两者都为False时才返回False。
非布尔值的与或运算
当我们对非布尔值进行与或运算时,Python会将这些值当成布尔值进行下一步的处理,最终返回原值。
- 非布尔值运算规则:
与运算找False,第一个值是False就不看第二个值而直接返回第一个值,第一个值是True则直接返回第二个值。
r1 = 0 and 1
print(r1)
r2 = 1 and 0
print(r2)
r3 = 1 and 2
print(r3)
运行结果
或运算找True,如果第一个值是True就不看第二个值直接返回第一个值,第一个值是False则直接返回第二个值
r1 = 1 or 2
print(r1)
r2 = 1 or 0
print(r2)
r3 = 0 or 1
print(r3)
运行结果
9.2.5 条件运算符
如上图所示,条件运算符的在运算过程中先对表达式的进行一个逻辑判断,若判断为True则执行语句1,否则则执行语句2,示例如下:
# 求a,b中的较大者
a = 1
b = 2
c = a if a > b else b
9.3 运算符的优先级
关于运算符的优先级顺序可参考以下链接中的表格,表格中的运算符自上而下优先级逐渐升高。
https://docs.python.org/3/reference/expressions.html#operator-precedence