文章目录
- 什么是运算符
- 算术运算符
- 赋值运算符
- 比较运算符
-
-
- 种类
- 举例
- 注意
-
-
- [比较运算符返回的结果是布尔类型(true 或 false)。](#比较运算符返回的结果是布尔类型(true 或 false)。)
- 在比较浮点数时的精度问题
- [在比较字符时,比较的是字符的 ASCII 值。](#在比较字符时,比较的是字符的 ASCII 值。)
- 字符串之间不能直接使用比较运算符进行比较
-
-
- 逻辑运算符
- 位运算符
-
-
- 种类
- 举例
- 注意
-
-
- 位运算符只能用于整数类型(包括整型和布尔类型)的操作数。
- 位运算符按位地操作操作数的二进制表示。
- [对于有符号整数,Python 使用补码表示法。](#对于有符号整数,Python 使用补码表示法。)
- 会根据操作数的位数自动进行位数扩展(填充零)或截断操作。
- 可能会遇到溢出的情况,即结果超出了操作数所能表示的范围。
-
-
- 成员运算符
- 身份运算符
什么是运算符
举个栗子
5 - 3
5,3都是操作数,-
就是运算符
算术运算符
种类
加法:+
减法:-
乘法:*
除法:/
取模(取余):%
幂运算:**
整除://
举例
下面以 a= 10 ,b = 20为例
注意
运算顺序:
Python遵循数学中的运算优先级,先进行括号内的运算,然后是幂运算,接着是乘法、除法和取模运算,最后是加法和减法运算。如果有多个运算符混合在一起,可以使用括号来明确运算的顺序。
整数除法和浮点数除法
在Python中,除法运算符
/
会返回一个浮点数结果,即使被除数和除数都是整数。如果你需要进行整除,可以使用双斜杠运算符//。
取模运算
取模运算符
%
用于获取两个数相除的余数。需要注意的是,取模运算的结果与被除数的符号相同。
例如,5 % 2的结果是1,而-5 % 2的结果是-1。
幂运算
幂运算符
**
用于计算一个数的指数幂。
例如,2 ** 3的结果是8(即2的3次方)。
字符串拼接
加法运算符+
用于字符串的拼接。当其中一个操作数是字符串时,它们将被连接在一起。
例如,"Hello, " + '666' 的结果是 "Hello, 666"
注意整数与浮点数之间的运算
在Python中,整数与浮点数进行运算时,结果将会自动转换为浮点数
例如,3 + 2.5的结果是5.5。
注意溢出问题
当进行数值运算时,需要注意结果是否会导致数据溢出。在使用大整数或大浮点数进行运算时,需要特别注意结果是否超过了数据类型的范围。
赋值运算符
种类
简单赋值:=
加法赋值:+=
减法赋值:-=
乘法赋值:*=
除法赋值:/=
取模赋值:%=
幂运算赋值:**=
整除赋值://=
举例
注意事项
赋值顺序
赋值运算符=将右侧的值赋给左侧的变量。注意确保赋值操作符的右侧是要赋给左侧的变量的值。
多重赋值
Python支持多重赋值,即在一条语句中同时为多个变量赋不同的值。
例如,a, b, c = 10, 20, 30
这样就可以将变量a赋值为10,变量b赋值为20,变量c赋值为30。
增量赋值运算符
增量赋值运算符(如+=、-=、*=等)结合了算术运算符和赋值运算符。它们可以简化代码,并在执行赋值的同时进行运算。
例如,a += 5等价于a = a + 5。
赋值运算符链式操作
Python允许连续使用赋值运算符进行链式赋值。
例如,a = b = c = 1可以连续将变量a、b和c都赋值为1。
注意可变对象的赋值
当将一个可变对象(如列表或字典)赋给另一个变量时,实际上是将对象的引用赋给了变量 。这意味着对其中一个变量所做的修改会影响到另一个变量。要注意这种引用的副作用。
注意不可变对象的赋值
当将一个不可变对象(如数字、字符串或元组)赋给另一个变量时,实际上是创建了一个新的对象,并将其赋给变量。对其中一个变量所做的修改不会影响到另一个变量。
赋值运算符的优先级
赋值运算符具有较低的优先级,因此在复合表达式中使用赋值运算符时,需要注意运算的顺序和结果。
补充
- a += 5等价于a = a + 5,但是前者直接对a修改,更快,地址也不变,后者,是先修改在赋值,地址可能会变
- 在赋值运算符链式操作中,变量之间是共享同一个对象的引用。这意味着对其中一个变量所做的修改会影响到其他变量。因此,在使用这些赋值方式时要小心处理可变对象的情况,以免出现意料之外的结果。
- 当使用多重赋值和赋值运算符链式操作时,对可变对象(如列表)的修改会体现出明显的差异
python
# 多重赋值
a = b = [1, 2, 3]
a.append(4)
print(b) # 输出: [1, 2, 3, 4]
# 赋值运算符链式操作
c = d = [1, 2, 3]
c = c + [4]
print(d) # 输出: [1, 2, 3]
比较运算符
种类
等于:==
不等于:!=
大于:>
小于:<
大于等于:>=
小于等于:<=
举例
注意
比较运算符返回的结果是布尔类型(true 或 false)。
在比较浮点数时的精度问题
由于浮点数的精度问题,最好使用相对误差或容忍误差的方式来进行比较。
在比较字符时,比较的是字符的 ASCII 值。
字符串之间不能直接使用比较运算符进行比较
需要使用字符串的相关方法(如 strcmp 或相关库函数)来实现字符串的比较。
逻辑运算符
种类
与:and
或:or
非:not
举例
假设 a = 10,b=20
注意
不限类型
Python 中的逻辑运算符的操作数可以是任意类型的,不仅限于布尔类型。
使用短路求值
逻辑与运算符和逻辑或运算符都使用短路求值的策略,即只有在必要时才会计算和评估第二个条件。(相当于c语言的&&,||)
注意优先级
Python 的逻辑运算符具有优先级,可以使用括号来明确指定运算顺序,避免歧义。
位运算符
种类
按位与(&):对两个操作数的每个对应位执行位与操作。
按位或(|):对两个操作数的每个对应位执行位或操作。
按位异或(^):对两个操作数的每个对应位执行位异或操作。
按位取反(~):反转操作数的每一位,包括符号位。
左移(<<):将操作数的各个位向左移动指定的位数。
右移(>>):将操作数的各个位向右移动指定的位数。
举例
注意
位运算符只能用于整数类型(包括整型和布尔类型)的操作数。
如果应用于其他类型的操作数,Python 会自动将其转换为整数进行运算。
位运算符按位地操作操作数的二进制表示。
因此,在使用位运算符之前,需要确保你理解操作数的二进制表示形式。
对于有符号整数,Python 使用补码表示法。
这意味着对于负数,最高位是符号位(1 表示负数),其余位表示数值部分。
会根据操作数的位数自动进行位数扩展(填充零)或截断操作。
例如,针对两个操作数长度不同的情况下,Python 会将较短的操作数补充到相同的位数,然后再进行位运算。
可能会遇到溢出的情况,即结果超出了操作数所能表示的范围。
在使用位运算符时,应注意操作数的取值范围,以避免溢出问题。
成员运算符
种类
判断是否为成员:in
判断是否不是成员:not in
举例
注意
成员运算符用于检查一个值是否存在于一个序列(如字符串、列表、元组等)中。
成员运算符对于不同类型的序列有不同的工作方式:
- 字符串:成员运算符检查一个子字符串是否存在于大字符串中。
- 列表和元组:成员运算符检查一个元素是否存在于列表或元组中。
- 对于字典类型的数据结构,成员运算符只能用于检查键是否存在 ,而不能用于检查值是否存在。
身份运算符
种类
判断两个对象是否相等:is
判断两个对象是否不相等:is not
举例
注意
身份运算符用于比较两个对象的身份(内存地址)是否相同。
==
比较对象是否相等 根据数据的值和类型
is
根据俩者的地址
注意身份运算符的适用范围
它通常用于比较可变对象(如列表、字典)或自定义对象的身份。
一般不用于不可变对象
对于不可变对象(如数字、字符串、元组),它们的身份是不可更改的,因此身份运算符对它们没有太多意义。