Python运算符是用于对变量执行各种操作的特殊符号。包括:算术运算符、比较运算符、赋值运算符、逻辑运算符、位运算符、成员运算符和身份运算符。
1、算术运算符
Python算术运算符用于数值计算,包括加(+)、减(-)、乘(*)、除(/)、取模(%)和幂(**)等。以下是Python中的算术运算符:
- 加法运算符(+): 两数相加。例如:3 + 4 = 7
- 减法运算符(-): 两数相减。例如:5 - 2 = 3
- 除法运算符(/): 计算两个数相除的结果,并返回一个浮点数。例如:10 / 3 = 3.33333
- 取整运算符(//): 返回两个数相除的整数部分,省略小数部分。例如:10 // 3 = 3
- 取模运算符(%): 模是指两个数相除后得到余数。例如:10 % 3 = 1
- 乘法运算符(*): 两个操作数相乘。例如:2 * 3 = 6
- 幂运算符(**): 一个操作数作为底数,另一个操作数作为指数。例如:2 ** 3 = 8
注意:
在 Python 3 中,除法运算符 `/` 的结果通常会保留到最多的有效数字位数,即根据被除数和除数的数据类型和值自动变化精度,有时会一直保留到浮点型的末尾。因此,该运算符通常不会默认保留一个固定的小数位数。
但是,如果您希望对除法得到的结果进行特定的精度控制,则需要使用字符串格式化或者Python内置的round()函数。
例如,要将除法得到的结果保留两位小数,可以使用字符串格式化方式:
a = 11
b = 3
result = a / b # 计算结果为 3.6666666666666665
print('%.2f' % result) # 输出:3.67
又如,也可以用内置的 round() 函数来手动控制小数位数:
a = 11
b = 3
result = a / b # 计算结果为 3.6666666666666665
print(round(result, 2)) # 输出:3.67
需要注意的是,在某些情况下会出现无穷小数和循环小数,就算限制了小数点后位数仍可能产生误差。因此,在进行高精度计算时,可能需要考虑使用类库支持更高精度计算。
2、比较运算符
在 Python 中,比较运算符用于对两个值或表达式的结果进行比较。以下是 Python 支持的比较运算符:
- `>` 大于:如果左侧操作数大于右侧,则返回 True,否则返回 False。
- `<` 小于:如果左侧操作数小于右侧,则返回 True,否则返回 False。
- `>=` 大于等于:如果左侧操作数大于或等于右侧,则返回 True,否则返回 False。
- `<=` 小于等于:如果左侧操作数小于或等于右侧,则返回 True,否则返回 False。
- `==` 等于:如果左侧操作数等于右侧,则返回 True,否则返回 False。
- `!=` 不等于:如果左侧操作数不等于右侧,则返回 True,否则返回 False。
需要注意的是,比较运算符的结果一般为布尔值 True 或 False。
请记住,这些运算符可以用于任何基本数据类型,包括数字、字符串和布尔值,并且也可以用于其他许多 Python 对象类型的比较。在使用比较运算符时,要确保两个操作数具有相同的类型。否则,Python将尝试执行类型转换。这可能会导致不可预测的结果。
3、赋值运算符
Python中的赋值运算符包括:
- `=`:简单赋值,将右边的值赋给左侧变量。
+=
:加法赋值,相当于把左侧变量与右侧表达式相加,并将结果赋给左侧变量。-=
:减法赋值,相当于把左侧变量与右侧表达式相减,并将结果赋给左侧变量。*=
:乘法赋值,相当于把左侧变量与右侧表达式相乘,并将结果赋给左侧变量。/=
:除法赋值,相当于把左侧变量与右侧表达式相除,并将结果赋给左侧变量。//=
:整除赋值,相当于把左侧变量与右侧表达式做整除运算(向下取整),并将结果赋给左侧变量。%=
:取模赋值,相当于把左侧变量与右侧表达式做取模运算,并将结果赋给左侧变量。**=
:幂运算赋值,相当于把左侧变量做幂运算(底数为左侧变量,指数为右侧表达式),并将结果赋给左侧变量
Python中的复合赋值运算符是指在赋值操作中将一种算术或按位运算与赋值组合在一起,将右侧表达式的结果应用于左侧变量。这些复合赋值运算符可以大大简化代码和增加可读性。以下是一些示例:
x += 2 # 加法赋值,等价于 x = x + 2
x -= 5 # 减法赋值,等价于 x = x - 5
x *= 3 # 乘法赋值,等价于 x = x * 3
x /= 2 # 除法赋值,等价于 x = x / 2
x //= 3 # 整除赋值,等价于 x = x // 3
x %= 2 # 取模赋值,等价于 x = x % 2
x **= 4 # 幂赋值,等价于 x = x ** 4
需要注意的是,在使用复合赋值运算符时,左侧操作数必须已经被定义。否则会将一个未定义的变量与右侧表达式相结合而导致 NameError 异常。
使用复合赋值运算符能够使代码更加简洁、清晰,并且能够提高代码的效率,主要有以下几点原因:
1. 更加便捷:使用复合赋值运算符可以避免在代码中重复输入变量名,从而减少打错变量名的错误。例如,使用 `+=` 可以将 `x += y` 转换为 `x = x + y`。
2. 更加高效:使用复合赋值运算符可以使代码更加高效。因为使用常数倍的运算符比使用两个操作数的所有的基本算术运算符更快。所以,在处理大型数据集时,复合赋值运算符可以帮助您编写更快的程序。
3. 更加易读:使用复合赋值运算符可以使代码更加易于阅读和理解,让代码的意图更加清晰。例如,使用 `+=` 告诉读者该变量将会增加一个特定数量的值,而不是仅仅分配一个值,从而更容易推导出代码的意图。
除了上述原因,使用复合赋值运算符还能够使代码更加简洁,减少代码量,更好地实现 DRY(Don't Repeat Yourself)原则,代表着对代码重构技术套路的最高全面性。因此,在编写 Python 代码时建议尽量使用复合赋值运算符,以提高代码的清晰度、可读性和效率。
4、逻辑运算符
Python中的逻辑运算符指的是用于连接两个或多个关系表达式的运算符。在Python中,常见的逻辑运算符有三种:and
(且)、or
(或)和not
(非)。
and
运算符:当左右两侧的表达式都为True时,整个表达式才会返回True;否则,返回False。示例代码:a and b
or
运算符:当左右两侧的表达式至少一个为True时,整个表达式即可返回True;只有当左右两侧的表达式都为False时,整个表达式才会返回False。示例代码:a or b
not
运算符:该运算符用于反转布尔值,如果表达式为True,则返回False;如果表达式为False,则返回True。示例代码:not a
在Python中,逻辑运算符的优先级顺序从高到低依次如下:
1.`not`:非运算符,优先级最高,如:
not True and False # 等同于 (not True) and False2.`and`:且运算符,
中间优先级,如:True and False or True # 等同于 (True and False) or True3.`or`:或运算符,优先级最低,如:
False or True and True # 等同于 False or (True and True)
需要注意的是,逻辑运算符的优先级可能会受到括号的影响,例如,如果表达式中有括号,则括号内的优先级最高。因此,在编写与逻辑相关的表达式时,建议显式地使用括号,以避免优先级引起的错误。
5、位运算符
Python 中的位运算符是用于对二进制数进行操作的运算符。以下是 Python 中常用的位运算符:
1. 按位与(&):当两个相应的二进制数都为 1 时,结果是 1,否则为 0。
示例:
a = 60
b = 13
c = a & b # 12
说明:60 的二进制表示是 0011 1100,13 的二进制表示是 0000 1101。按位与运算符 & 将按位比较两个数,当两个相应的二进制数都为 1 时,结果为 1,否则为 0。因此,以下是计算 60 & 13 的过程:
0011 1100
& 0000 1101
-----------
0000 1100
因此,60 & 13 的结果是 12。
2. 按位或(|):当两个相应的二进制数中至少有一个为 1 时,结果为 1,否则为 0。
3. 按位异或(^):当两个相应的二进制数中有且仅有一个为 1 时,结果为 1,否则为 0。
4. 按位取反(~):对于一个数 x,按位取反运算结果为 -(x+1)。
5. 左移位(<<):指将一个数的二进制码向左移动指定的次数,右边移入指定数目的 0。
6. 右移位(>>):指将一个数的二进制码向右移动指定的次数,左边移入指定数目的符号位(正数补 0,负数补 1)。
需要注意的是,位运算符只对整数类型进行操作,如果用于其他类型(比如浮点数),则会抛出 TypeError 异常。同时,位运算符的优先级较低,所以在使用时应该总是使用括号来明确优先级。
6、成员运算符
在 Python 中,成员运算符用于测试给定值是否存在于序列中。以下是 Python 中常用的成员运算符:
1. in:如果在序列中找到了指定的值,则返回 True,否则返回 False。
a = [1, 2, 3]
print(2 in a) # True
print(4 in a) # False
2. not in:如果在序列中没有找到指定的值,则返回 True,否则返回 False。
a = [1, 2, 3]
print(2 not in a) # False
print(4 not in a) # True
需要注意的是,in 和 not in 运算符只适用于序列类型(如列表、元组、字符串等),不能用于数字、字典等其他数据类型。
7、身份运算符
在Python中,`is`和`is not`是用于比较两个对象的身份运算符,即判断它们是否指向同一块内存地址。
具体来说,当两个变量指向相同的内存地址时,`is`返回`True`,否则返回`False`。示例如下:
a = [1, 2, 3]
b = a
c = [1, 2, 3]
print(a is b) # True,因为a和b都指向同一个列表对象
print(a is c) # False,因为a和c虽然值相同,但指向不同的列表对象
print(a is not c) # True,a和c指向不同的列表对象,因此返回True
但是,在实际编程中不建议使用`is`运算符来比较数字或字符串等简单类型的数据对象,应该使用比较运算符`==`进行比较。因为在某些情况下,`is`可能会返回意外的结果,导致程序出现难以预料的错误。
reference: