python运算符

来源
运算符是用于进行各种运算操作的符号或关键词。

Python 语言常用运算符如下:

  • 算术运算符
  • 比较(关系)运算符
  • 赋值运算符
  • 逻辑运算符
  • 成员运算符 in 、not in
  • 身份运算符 is 、is not
  • 运算符优先级

这些运算符,根据使用操作数的不同,可分为:

  • 单目运算符
  • 双目运算符
  • 三目运算符

1.算术运算

除法 / : 两个操作数相除,结果为浮点数类型
整除 // : 两个操作数相除,取商,结果为整数类型
取模 % : 也称为求余运算符, 两个操作相除,取余数为计算结果
幂运算 ** :返回 x 的 y 次幂

2.赋值运算符

(1)普通赋值运算符 =
将等号左侧的数据保存到等号右侧的变量中

a = 1
s = "Hello"
sum = 1 + 2

赋值运算符还支持同时定义多个变量

a, b, c = 1, 2, 3
print(a, b, c)

(2)复合赋值运算符
+=
-=
*=

3.逻辑运算符

与and
或or
非not

3.1短路特性

在使用 逻辑与 运算符和 逻辑或 运算符时,如果自左向右计算结果可以确定整个表达式的结果时,后面的表达式条件便不在计算。
(1) 非短路操作

result = True and print("Hello, World!1")  # 第一个操作数为True,不能确定后续都为真,所以print语句会执行
print(result)   # 输出 None,print语句的返回值为None

result = False or print("Hello, World!2")  # 第一个操作数为False,不能确定后续都为假,所以print语句会执行
print(result)  # 输出 None,print语句的返回值为None

(2) 短路操作

result = False and 1/0  # 第一个操作数为False,已经可以确认整个表达式的结果,虽然表达式有除0错误,但并不会执行
print(result)  # 结果为False

result = True or 1/0  # 第一个操作数为True,已经可以确认整个表达式的结果,虽然表达式有除0错误,但并不会执行
print(result)  # 结果为True

4.成员运算符

用于判断实例中是否包含了一系列的成员,包括字符串,列表或元组。
(1)in 如果在指定的序列中找到值返回 True ,否则返回 False
(2)not in 如果在指定的序列中没有找到值返回 True ,否则返回 False

5.身份运算符

Python 中的身份运算符用来判断两个对象的引用是否为同一个,换言之,就是用来比较两个对象的内存地址是否相同

5.1 身份运算符

1.is 是判断两个标识符是不是引用自一个对象
is 用来判断两个对象内存引用地址是否相同,如果相同,结果为真 True ,如果不相同,结果为假 False

注意:两个字面量相同的对象,内存地址未必相同,就像两个双胞胎,长的相同,但是是两个独立的个体。

2. is not 是判断两个标识符是不是引用自不同对象|
is not 用来判断两个对象内存引用地址是否不同,如果不同,结果为真 True ,如果相同,结果为假 False

5.2 特殊情况

Python 对数字和字符串做了一些优化以提高性能和减少内存开销。
以下是 Python 对数字和字符串做的一些优化:
(1)整数池(Integer Pool):Python 会在程序运行时预先创建一些整数对象,并将其保存在整数池中。这样,在创建整数对象时,可以重用已存在的对象,而不是创建新的对象。这在一定程度上减少了内存开销。
(2)字符串池(String Pool):对于较短的字符串,Python 会使用字符串池进行优化。字符串池是一个缓存区,保存着所有共享相同内容的字符串对象。当创建新的字符串对象时,Python 会首先检查是否已经存在相同内容的字符串对象,如果存在,则直接重用已有的对象,避免重复创建新的对象。

5.3 is和==的区别

在 Python 中,万物皆对象,而对象的三个基本要素:

  • 内存地址
  • 数据类型

is== 都作为常用的判断语句去进行使用,这两者之间的主要区别是:

(1) == 运算符: 只比较两个对象的,相同返回 True,不同返回 False
(2) is 运算符: 比较两个对象的地址引用,相同返回 True,不同返回 False

6.三目运算符/三元运算符

可以将 Python 中的三目运算符理解成是: if-else 分支语句的简化单行模式

语法格式: [on_true] if [expression] else [on_false]

  • on_true: 条件为真时的结果
  • on_false: 条件为假时的结果
  • expression: 判断条件

Python 会先判断 expression 条件表达式的结果:

  • 如果条件为真,则结果为 [on_true] 的值
  • 如果条件为假,则结果为 [on_false] 的值
print("Yes" if True else "No")
print("Yes" if False else "No")

注意: 实际开发过程中,不建议使用三目运算符,相比较 if-else 结构的分支语句,三目运算符的可读性不高。

7.运算符优先级

优先级