运算符和优先级
在Python中可以将运算符定义为负责两个操作数之间的特定操作的符号。Python中的运算符包括算术运算符、比较运算符、赋值运算符、逻辑运算符、位运算符、成员运算符、身份运算符、运算符优先级。
运算符
算术运算符
算术运算符用于在两个操作数之间执行算术运算。它包括加法(+),减法(-),乘法(*),除法(/),取余(%),指数(**),向下取整(//)运算。
以下实例中,若未说明数值则a=10,b=20
算数运算符 | 描述 | 示例 |
---|---|---|
+ | 两个操作数相加 | a+b=30 |
- | 第一个操作数减去第二个操作数 | a-b=-10 |
* | 两个操作数相乘 | a*b=200 |
/ | 第一个操作数除以第二个操作数 | a/b=0.5 |
% | 将第一个操作数除以第二个操作数后返回余数 | 21%10=1 |
** | 计算第一个操作数的第二个操作数次幂 | 3**4=81 |
// | 计算两个操作数的商并向下取整 | 10//4=2 |
赋值运算符
赋值运算符用于将右表达式的值赋给左操作数。赋值运算符如下表所述。
运算符 | 描述 | 示例 |
---|---|---|
= | 将右表达式的值赋给左操作数 | c=a+b,将a+b的值赋值给c |
+ = | 通过右操作数的值增加左操作数的值,并将修改后的值赋给左操作数 | a +=b,即a=a+b |
- = | 将左操作数的值减小右操作数的值,并将修改后的值分配回左操作数 | a -=b,即a=a-b |
* = | 将左操作数的值乘以右操作数的值,并将修改后的值赋值回左操作数 | a *=b,即a=a*b |
/ = | 左操作数的值除以右操作数的值,并将修改后的值赋值回左操作数 | a /=b,即a=a/b |
%= | 将左操作数的值取余右操作数的值 | a %=b,即a=a%b |
**= | 将左操作数的值取幂右操作数的值 | a **=b,即a=a **b |
//= | 将左操作数的值向下取整右操作数的值 | a //=b,即a=a //b |
比较运算符
比较运算符用于比较两个操作数的值,并相应地返回布尔值true或false。
运算符 | 描述 | 示例 |
---|---|---|
== | 如果两个操作数的值相等,则条件变为真 | (1 == 2) 返回 False |
!= | 如果两个操作数的值不等,则条件变为真 | (1 != 2) 返回true |
> | 如果第一个操作数大于第二个操作数,则条件变为真 | (1 > 2) 返回flase |
< | 如果第一个操作数小于第二个操作数,则条件为真 | (1 < 2) 返回true |
<= | 如果第一个操作数小于或等于第二个操作数,则条件变为真 | (1 <= 2) 返回 true |
> = | 如果第一个操作数大于或等于第二个操作数,则条件变为真 | (1 >= 2) 返回false |
逻辑运算符
逻辑运算符用于计算逻辑表达式的值。
运算符 | 描述 | 示例 |
---|---|---|
and | 如果表达式都为真,则条件为真 | true and false --> true |
or | 如果其中一个表达式为真,则条件为真 | true or false --> true |
not | 如果表达式a为真,则返回假;若未假则返回真 | not true --> false |
对象实例测试运算符
身份运算符用于比较两个对象的存储单元
运算符 | 描述 | 实例 |
---|---|---|
is | 如果两侧存在的参数指向同一对象,则返回为真 | a is b,如果引用的是同一个对象则返回 True,否则返回 False |
not is | 如果两侧存在的参数不指向同一对象,则返回为真 | a is not b, 如果引用的不是同一个对象则返回结果 True,否则返回 False。 |
成员关系运算符
成员运算符主要用于字符串,列表或元组等类型。
运算符 | 描述 | 实例 |
---|---|---|
in | 如果在指定的序列中找到值返回 True,否则返回 False | x 在 y 序列中 , 如果 x 在 y 序列中返回 True |
not in | 如果在指定的序列中没有找到值返回 True,否则返回 False | x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True |
位运算符
按位运算符是把数字看作二进制来进行计算的。Python中的按位运算法则如下:
下面示例中变量 a 为 50,b 为 13。二进制形式如下:
a = 0011 0010
b = 0001 1110
a&b = 0001 0010
a|b = 0011 1110
a^b = 0010 1100
~a = 1100 1101
a<<1 = 0110 0100
b>>2 = 0000 0111
运算符 | 描述 | 示例 |
---|---|---|
& | 与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 | a & b 输出结果未18 |
| | 或运算符:只要对应的二个二进位有一个为1时,结果位就为1 | a | b 输出结果为62 |
^ | 异或运算符:当两对应的二进位相异时,结果为1 | a ^ b 输出结果为44 |
~ | 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1 | ~a 输出结果为-51(使用带符号整数对a的按位取反的结果) |
<< | 左移动运算符:把运算数的各二进位全部左移若干位,高位丢弃,低位补0 | a<<1 输出结果100 |
>> | 右移动运算符:把运算数的各二进位全部右移若干位,高位丢弃,低位补0 | b>>2 输出结果为7 |
运算符优先级
运算符 | 描述 |
---|---|
() | 括号,用于强制改变表达式的求值顺序 |
** | 幂运算 |
~、+、- | 按位取反,正、负号 |
*、/、%、// | 乘、除、取模和取整除 |
+、- | 加法、减法 |
<<、>> | 左移、右移运算符 |
& | 按位与 |
^、| | 位运算符 |
<=、<、>、>=、<> == != | 比较运算符 |
is not is | 身份运算符 |
in not in | 成员运算符 |
not and or | 逻辑运算符 |
= += -= = /= %== **= | 赋值运算符 |
计算顺序
- 运算符优先级表决定了运算符的计算顺序
- 具有相同优先级的运算符按照从左向右的顺序计算
- 使用圆括号来改变计算顺序
- python中存在短路运算
短路运算
短路运算是指在逻辑运算中,如果表达式的结果已经可以确定,那么就不再继续执行后面的表达式。
- 当一个表达式中有多个or、and运算时,可能会出现短路运算。以下是短路运算的一些基本规则:
- 表达式从左至右运算
-
or逻辑
-
若 or 的左侧逻辑值为 True ,则直接输出 or 左侧表达式 。
-
若 or 的左侧逻辑值为 False ,则直接输出or右侧的表达式。
-
-
and逻辑
若 and 的左侧逻辑值为 False ,则直接输出 and 左侧表达式
若 and 的左侧逻辑值为 True,则直接输出and右侧的表达式。
即,若or的左侧逻辑值为True,则短路or后所有的表达式,直接输出True;
若and的左侧逻辑值为False,则短路其后所有and表达式,直到有or出现,输出and左侧表达式到or的左侧。
示例:
>>> print(True or False)
True
>>>print(False or True)
True
>>>print(True and False)
False
>>>print(True and True)
True
>>>print(True and False or True)
True
>>>print(False or True and False)
False
尽量不要在一个表达式内使用过多的or和and,或者以括号 () 来区分逻辑顺序。