Python 测开28期-Sam-学习笔记-Python运算符

一、运算符
1.什么是运算符:运算符是用于进行各种运算操作的符号或关键词。+ - *
比如:

  • 4 + 5,其中,45 为操作数,+ 为运算符。
  • a = 10, 其中, a10 为操作数, = 为运算符。
  • print(), 其中, print 为操作数, () 为运算符。
    Python 语言常用运算符如下:
  • 算术运算符
  • 比较(关系)运算符
  • 赋值运算符
  • 逻辑运算符
  • 成员运算符
  • 身份运算符
  • 运算符优先级
    这些运算符,根据使用操作数的不同,可分为:
  • 单目运算符
  • 双目运算符
  • 三目运算符
    在每一门语言中,运算符都是非常简单,但是非常重要,非常难以熟练掌握和灵活应用的知识点。
    二、算数运算符
    1.在编写程序时,可以使用算术运算符来进行基本的数学计算。Python 中的算术运算符包括加法、减法、乘法、除法、取模和幂运算
    |运算符|描述|
    |—|—|
    |+|加法 : 两个操作数相加|
    |-|减法 : 两个操作数相减|
    |*|乘法 : 两个操作数相乘|
    |/|除法 : 两个操作数相除,结果为浮点数类型|
    |%|取模 : 也称为求余运算符, 两个操作相除,取余数为计算结果|
    |**|幂运算 :返回x的y次幂|
    |//|整除 : 两个操作数相除,取商,结果为整数类型|

加法运算符(+)

加法运算符用于将两个数相加。

例如,a + b 表示将 a 和 b 相加的结果。 如果 a 和 b 都是数字,则加法运算符将执行数学加法操作。 如果 a 和 b 是字符串,则加法运算符将执行字符串连接操作。

a = 10
b = 20
c = a + b
print("a + b 的值为:", c)

s1 = "hello"
s2 = "hogwarts"
res = s1 + s2
print("字符串拼接结果为:", res)

减法运算符(-)
减法运算符用于将一个数减去另一个数。例如,a - b 表示将 b 从 a 中减去的结果。

a = 10
b = 20
c = a - b
print("a - b 的值为:", c)

乘法运算符(*)
乘法运算符用于将两个数相乘。例如,a * b 表示将 a 和 b 相乘的结果。

a = 10
b = 20
c = a * b
print("a * b 的值为:", c)

除法运算符(/)
除法运算符用于将一个数除以另一个数。例如,a / b 表示将 a 除以 b 的结果。需要注意的是,如果除数为 0,将会抛出异常。
在Python中,使用 /进行除法运算时,会得到一个浮点数,如果需要整除运算需要使用 // 整除运算符

a = 10
b = 20
c = b / a
print("b / a 的值为:", c)

取模运算符(%)

取模运算符用于获取两个数相除的余数。例如,a % b 表示将 a 除以 b 的余数。

需要注意的是,取模运算本质上也是除法运算,如果除数为 0,将会抛出异常。

a = 10
b = 20
c = b % a
print("b % a 的值为:", c)

幂运算符(**

幂运算符用于获取一个数的指数幂。例如,a ** b 表示将 a 的 b 次方。

a = 2
b = 10
c = a ** b
print("a ** b 的值为:", c)

整除运算符(//)

整除运算符用于将一个数除以另一个数,该运算符会得到一个整数的商。

需要注意的是,如果除数为 0,也将会抛出异常。

a = 10
b = 20
c = b // a
print("b / a 的值为:", c)

三、赋值运算符
赋值运算符是使用 = 做为运算符号,将运算符左侧的数据或表达式的结果,保存到运算符左侧的标识符中。
在使用赋值运算符时,运算符右侧可以是任意类型的数据,但左侧必须是一个变量,否则会报错。
除普通的赋值运算符外,赋值运算符还可以和算术运算符组合成为复合赋值运算符。
Python 中提供的赋值运算符如下表所示:

运算符 描述 实例
= 简单的赋值运算符 c = a + b 将 a + b 的运算结果赋值为 c
+= 加法赋值运算符 c += a 等效于 c = c + a
-= 减法赋值运算符 c -= a 等效于 c = c - a
*= 乘法赋值运算符 c *= a 等效于 c = c * a
/= 除法赋值运算符 c /= a 等效于 c = c / a
%= 取模赋值运算符 c %= a 等效于 c = c % a
**= 幂赋值运算符 c **= a 等效于 c = c ** a
//= 取整除赋值运算符 c //= a 等效于 c = c // a
四、关系运算符

关系运算符

关系运算符也称为比较运算符,用来对参与运算的两个操作数进行比较,确认两个操作数之间的关系,运算结果会返回一个布尔值

Python 中提供的关系运算符如下表所示:

运算符 描述
== 等于 : 比较对象是否相等
!= 不等于 : 比较两个对象是否不相等
> 大于 : 返回x是否大于y
< 小于 : 返回x是否小于y
>= 大于等于 : 返回x是否大于等于y。
<= 小于等于 : 返回x是否小于等于y。
五、逻辑运算符

逻辑运算符

逻辑运算符一般用来解决当有多个关系条件需要判断时使用,用来确定这些条件组合的方式,运算结果为布尔类型值。

Python 中提供的逻辑运算符如下表所示:

运算符 逻辑表达式 描述
and x and y 逻辑"与" : 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。
or x or y 逻辑"或" : 如果 x 是非 0,它返回 x 的计算值,否则它返回 y 的计算值。
not not x 逻辑"非" : 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。
六、成员运算符

成员运算符

Python 提供了成员运算符,用于判断实例中是否包含了一系列的成员,包括字符串,列表或元组。

如下表所示:

运算符 描述
in 如果在指定的序列中找到值返回 True,否则返回 False。
not in 如果在指定的序列中没有找到值返回 True,否则返回 False。
七、身份运算符

身份运算符

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

Python 对数字和字符串做了一些优化以提高性能和减少内存开销。以下是 Python 对数字和字符串做的一些优化:

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

因此,在某些情况下,字面量相同的两个对象,实际并不是同一个对象,此时如果需要区分对象的话,就需要使用身份运算符。

身份运算符如下表所示:

运算符 描述
is is 是判断两个标识符是不是引用自一个对象
is not is not 是判断两个标识符是不是引用自不同对象

身份运算符 is

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

# 示例 1
str1 = "Hello"
str2 = "Hello"
print(id(str1))  # 输出第一个字符串对象的内存地址
print(id(str2))  # 输出第二个字符串对象的内存地址
print(str1 == str2)
print(str1 is str2)
# 示例 2
str3 = "Hello, World!" * 1000
str4 = "Hello, World!" * 1000
print(id(str3))  # 输出第一个字符串对象的内存地址
print(id(str4))  # 输出第二个字符串对象的内存地址
print(str3 == str4)
print(str3 is str4)

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

身份运算符 is not

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

# 示例 1
str1 = "Hello"
str2 = "Hello"
print(id(str1))  # 输出第一个字符串对象的内存地址
print(id(str2))  # 输出第二个字符串对象的内存地址
print(str1 == str2)
print(str1 is not str2)
# 示例 2
str3 = "Hello, World!" * 1000
str4 = "Hello, World!" * 1000
print(id(str3))  # 输出第一个字符串对象的内存地址
print(id(str4))  # 输出第二个字符串对象的内存地址
print(str3 == str4)
print(str3 is not str4)

is 和 == 的区别

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

  • 内存地址
  • 数据类型

  • is== 都作为常用的判断语句去进行使用,这两者之间的主要区别是:
  • == 运算符: 只比较两个对象的值,相同返回 True,不同返回 False
  • is 运算符: 比较两个对象的id,相同返回 True,不同返回 False
    在这种场景下, 两个判断的执行结果均为 True
a, b = 1,1
# 判断a,b 是否相等
print(a == b)
print(a is b)

在这种场景下, 两个判断的执行结果不一致。

a = [1,2,3]
b = [1,2,3]
# 对比值一致,返回True
print(a == b)
# 对比内存地址不一致,返回False
print(a is b)

八、三目运算符

三目运算符

三目运算符也称为三元运算符,是指运算符在使用时,需要有三个操作数参与计算。
Python 中也提供三目运算符,但语法上与传统的三目运算符并不相同。
可以将 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 结构的分支语句,三目运算符的可读性不高。
九、运算符优先级

运算符优先级

Python中的运算符非常丰富,但在使用过程中除了需要注意各自的特性外,不同的运算符也具有不同的优先级别。

Python 运算符优先级如下表所示:

运算符 描述
(expressions…) 绑定或加圆括号的表达式
[expressions…], {key: value…}, 列表显示,字典显示,集合显示
x[index], x[index:index], x(arguments…), x.attribute 抽取,切片,调用,属性引用
** 乘方 5
+x, -x 正,负
*, @, /, //, % 乘,矩阵乘,除,整除,取余 6
+, - 加和减
in, not in, is, is not, <, <=, >, >=, !=, == 比较运算,包括成员检测和标识号检测
not 布尔逻辑非 NOT
and 布尔逻辑与 AND
or 布尔逻辑或 OR
if – else 条件表达式
=, +=, -=, *=, /=, //=, **= 赋值表达式

注意:因为位运算在后期课程使用过程中使用场景非常少,所以在本课程中并没有讲解(不代表在其它场景中不会使用)。

小技巧:如果在使用运算符的过程中,不能很好的掌握其优先级顺序,最简单的办法就是在需要先计算的表达式上加括号

print((2+3)*5)