Bootstrap

【Python】运算符

算术运算符

+ - * / % ** // 这种进行算术运算的运算符, 称为 算术运算符.

注意1: / 中不能用 0 作为除数. 否则会抛出异常

print(10 / 0)

在这里插入图片描述

  • 异常是编程语言中的一种常见机制, 表示程序运行过程中, 出现了一些 “意外情况”, 导致程序不能继续往下执行了.

注意2: 整数 / 整数 结果可能是小数. 而不会截断

print(1 / 2)

注意3: % 不是 “百分数”, 而是求余数.

注意4: ** 是求乘方. 不光能算整数次方, 还能算小数次方.

print(4 ** 2)
print(4 ** 0.5)

在这里插入图片描述
注意5: // 是取整除法(也叫地板除). 整数除以整数, 结果还是整数(舍弃小数部分, 并向下取整. 不是四舍五入)

关系运算符

像 < <= > >= == != 这一系列的运算符称为 关系运算符, 它们是在比较操作数之间的关系.
其中

  • "小于等于"是<=
  • "大于等于"是>=
  • "等于"是==
  • "不等于"是!=

如果关系符合, 则表达式返回 True. 如果关系不符合, 则表达式返回 False

a = 10
b = 20
print(a < b)
print(a <= b)
print(a > b)
print(a >= b)
print(a == b)
print(a != b)

在这里插入图片描述
关系运算符不光针对整数/浮点数进行比较, 还能针对字符串进行比较

a = 'hello'
b = 'world'
print(a < b)
print(a <= b)
print(a > b)
print(a >= b)
print(a == b)
print(a != b)

在这里插入图片描述

注意:
直接使用 == 或者 != 即可对字符串内容判定相等. (这一点和 C / Java 不同).
字符串比较大小, 规则是 “字典序”

关于字典序:
想象一个英文词典, 上面的单词都是按照字母顺序排列. 如果首个字母相同, 就比较第二个字母. (就
比如著名单词 abandon).
我们认为一个单词在词典上越靠前, 就越小. 越靠后, 就越大

对于浮点数来说, 不要使用 == 判定相等.

print(0.1 + 0.2 == 0.3)

在这里插入图片描述
注意: 浮点数在计算机中的表示并不是精确的! 在计算过程中, 就容易出现非常小的误差

print(0.1)
print(0.2)
print(0.3)
print(0.1 + 0.2)

在这里插入图片描述
可以看到, 0.1 + 0.2 的结果并非是 0.3 , 而是带了个小尾巴. 虽然这个尾巴非常小了, 但是 == 是锱铢必较的, 仍然会导致 == 的结果为 False

不止是 Python 如此, 主流编程语言都是如此. 这个是 IEEE754 标准规定的浮点数格式所引入的问题. 此处我们不做过多讨论

正确的比较方式: 不再严格比较相等了, 而是判定差值小于允许的误差范围.

a = 0.1 + 0.2
b = 0.3
print(-0.000001 < (a - b) < 0.000001)

实际工程实践中, 误差在所难免, 只要保证误差在合理范围内即可

逻辑运算符

and or not 这一系列的运算符称为 逻辑运算符.

  • and 并且. 两侧操作数均为 True, 最终结果为 True. 否则为 False. (一假则假)
  • or 或者. 两侧操作数均为 False, 最终结果为 False. 否则为 True. (一真则真)
  • not 逻辑取反. 操作数本身为 True, 则返回 False. 本身为 False, 则返回 True.
a = 10
b = 20
c = 30
print(a < b and b < c)
print(a < b and b > c)
print(a > b or b > c)
print(a < b or b > c)
print(not a < b)
print(not a > b)

在这里插入图片描述
一种特殊写法

a < b and b < c 这个操作等价于 a < b < c . 这个设定和大部分编程语言都不相同.

关于短路求值

和其他编程语言类似, Python 也存在短路求值的规则.

  • 对于 and, 如果左侧表达式为 False, 则整体一定为 False, 右侧表达式不再执行.
  • 对于 or, 如果左侧表达式为 True, 则整体一定为 True, 右侧表达式不再执行.
print(10 > 20 and 10 / 0 == 1)
print(10 < 20 or 10 / 0 == 1)

在这里插入图片描述

上述代码没有抛出异常, 说明右侧的除以 0 操作没有真正执行

赋值运算符

  • = 的使用
    = 表示赋值. 这个我们已经用过很多次了. 注意和 == 区分.
    = 除了基本的用法之外, 还可以同时针对多个变量进行赋值.

链式赋值

a = b = 10

多元赋值

a, b = 10, 20

代码实例: 交换两个变量

基础写法

a = 10
b = 20
tmp = a
a = b
b = tmp

基于多元赋值

a = 10
b = 20
a, b = b, a
  • 复合赋值运算符
    Python 还有一些 复合赋值运算符. 例如 += -= *= /= %=
    其中 a += 1 等价于 a = a + 1 . 其他复合赋值运算符也是同理.
a = 10
a = a + 1
print(a)
b = 10
b += 1
print(b)

注意: 像 C++ / Java 中, 存在 ++ -- 这样的自增/自减运算符. Python 中则不支持这种运算. 如果需要使用, 则直接使用 += 1 或者 -= 1

++ -- 最大的问题就是容易分不清前置和后置的区别. 这一点 Python 语法在设计的时候就进行了规避, 避免出现这种不直观, 并且容易混淆的语法.

其他

除了上述之外, Python 中还有一些运算符, 比如 身份运算符 (is, is not), 成员运算符 (in, not in), 位运算符( & | ~ ^ << >>) 等.

;