运算符
运算符是组成表达式的基本要素,是将标识符连接起来进行运算的主要方式。Python 中的运算符主要有算术运算符、比较运算符、赋值运算符、逻辑运算符、位运算符、成员运算符和身份运算符几种。
操作符一般有两个操作数,分别称为左操作数和右操作数,个别的操作符仅能接受一个操作数。
下面将依次进行介绍。
算术运算符
算术运算符是最基本的运算符,用于各种数学计算。
操作符 | 功能 |
---|---|
+ | 两个操作数相加,或者是拼合两个字符串 |
- | 两个操作数相减 |
* | 两个操作数相乘,或者是返回一个被重复若干次的字符串 |
/ | 两个操作数相除,始终返回浮点值 |
% | 取余,返回除法的余数 |
** | 幂,如 x ** y 相当于\( x^y \) |
// | 整除,仅返回商的整数部分 |
比较运算符
比较运算符用于两个操作数之间的比较,比较运算符会返回关键字True
或者False
。实际上所有比较运算符只会返回整型数值,其中 0
对应关键字False
,即假值;1
对应关键字True
,即真值。
操作符 | 功能 |
---|---|
== | 比较两个操作数是否相等 |
!= | 比较两个操作数是否不相等 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
赋值运算符
Python 中的变量不需要声明,但是每个变量在使用前都必须赋值,变量赋值后该变量才会被创建。Python 中的变量没有类型,一般所说的类型是指变量所指向的内存中对象的类型。赋值运算符还可以与算术运算符组合形成快速赋值运算符。
Python 中的变量有一个非常重要的特性,就是它仅仅是一个名称,是对对象的引用,而不是存储对象本身。
运算符 | 功能 |
---|---|
= | 基础赋值 |
+= | 加法赋值,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 允许同时为多个变量赋值,例如:a = b = c = 1
,这样三个变量都将指向同一个内存位置。还允许同时为多个对象指定多个变量,例如:a, b, c = 1, 2, "Hello"
,这样变量 a
与 b
将分别被分配给 1
和 2
,而字符串对象"Hello"
将分配给 c
。
对于赋值,Python 还提供了一个快速交换两个变量内容的方式,即a, b = b, a
,这可以让两个变量直接交换其指向的位置,从而达到交换变量值的目的。
位运算符
位运算符是将数字作为二进制来进行计算的。位运算在一些协议处理和低级别信息处理上十分有用。
操作符 | 功能 |
---|---|
& | 按位与,参与运算的两个值,相应的位为 1,则结果为 1,否则为 0 |
| | 按位或,参与运算的两个值,相应的位有一个为 1,则结果为 1, 否则为 0 |
^ | 按位异或,参与运算的两个值,相应的位不一致时,结果为 1,否则为 0 |
~ | 按位反,对操作数的每个二进制位取反,1 变为 0,0 变为 1 |
<< | 左移,将左操作数的各二进制位向左移动若干位,移动位数由右操作数的值决定,移动后,高位丢弃,低位补 0 |
>> | 右移,将左操作数的各二进制位向右移动若干位,移动位数由右操作数的值决定,移动后,低位丢弃,高位补 0 |
逻辑运算符
逻辑运算符与比较运算符类似,也是返回True
或者False
的值,但是这里需要注意的是,部分操作符还可能返回右操作数的值。
操作符 | 功能 |
---|---|
and | 布尔与,如果左操作数为False ,则返回False ,否则返回右操作数的计算值 |
or | 布尔或,如果左操作数为True ,则返回左操作数的值,否则返回右操作数的计算值 |
not | 布尔非,如果 🈶️ 操作数为True ,则返回False ,反之亦然 |
对于or
操作符,可以用来获取默认值,参考以下示例:
a = 40
print(a or 30) # 输出 40
a = 0
print(a or 30) # 输出 30
a = None
print(a or 30) # 输出 30
成员操作符
成员操作符用来测试实例中是否包含指定的成员,成员操作符可以应用于字符串、列表和元组中。
运算符 | 功能 |
---|---|
in | 如果在右操作数中找到了左操作数,则返回True |
not in | 如果在右操作数中找到了左操作数,则返回False |
身份操作符
身份操作符用于比较两个对象的存储单元。对于一个对象,可以使用id()
函数来获取其内存地址,身份操作符主要是用于判断两个操作数是否引用了同一个地址的对象。
操作符 | 功能 |
---|---|
is | 判断两个操作数是否引用了同一个对象,是同一个对象则返回True |
is not | 判断两个操作数是否引用了不同的对象,引用的对象不同则返回True |
is
与==
的区别在于,==
是用于判断引用的对象的值是否相等,而is
则是判断引用的对象的内存地址是否相等。
运算符优先级
当不同的运算符组合在一起时,不同的运算符会有一个优先级的区别,相同优先级的运算符遵循自左至右的计算,而拥有高优先级的运算符则会优先计算结果。这与日常先乘除后加减的数学计算规则相似。
下表按照由高至低的顺序列出了全部运算符的优先级。
操作符 | 功能 |
---|---|
** | 指数 |
~ 、+ 、- | 按位反,正负号 |
* 、/ 、% 、// | 乘、除、取余、整除 |
+ 、- | 加、减 |
>> 、<< | 右移、左移 |
& | 按位与 |
^ 、| | 按位异或、按位或 |
<= 、< 、> 、>= | 比较运算符 |
== 、!= | 等于运算符 |
= 、%= 、/= 、//= 、-= 、+= 、*= 、**= | 赋值运算符 |
is 、is not | 身份运算符 |
in 、not in | 成员运算符 |
and 、or 、not | 逻辑运算符 |