python运算符优先级
符号 | 描述 |
| 小括号 |
| 索引运算符 |
| 属性访问 |
| 幂运算符 |
| 按位取反 |
| 正号, 负号 |
| 乘, 除, 整除, 取余 |
| 加, 减 |
| 位右移, 位左移 |
| 按位与 |
| 按位抑或 |
| 按位或 |
| 等于, 不等于, 大于, 大于等于, 小于, 小于等于 |
| is运算符 |
| 存在运算符 |
| 逻辑非 |
| 逻辑与 |
| 逻辑或 |
| 逗号运算符 |
加, 减, 乘, 除, 取余, 常规运算
+
-
*
/
%
运算与其他语言一样, 多了复数类型的加减乘除运算+
# 数字类相加, 自动类型转换
print(type(23 + 3 + 5j)) # <class 'complex'>
print(type(23 + 3.3)) # <class 'float'>
加号运算符同时也是序列类型拼接符
# 序列类型相加, 自动合并序列
# 注意, 相加的两个序列必须是相同的类型, 字典+字典, 元祖+元祖, 列表+列表
a = (4, "aa")
b = (12, 6.4)
print(a + b) # (4, 'aa', 12, 6.4)
print(type(a + b)) # <class 'tuple'>
乘法运算符同时也是序列类型复制符
a = [12, 3.5, "hello"]
print(a * 2) # [12, 3.5, 'hello', 12, 3.5, 'hello']
b = ("abc", 12, 5.8)
print(b * 2) # ('abc', 12, 5.8, 'abc', 12, 5.8)
c = "abc"
print(c * 3) # abcabcabc
整除运算符 //
//
a = 5
b = 3
print(a // b) # 1
幂运算符 **
**
a = 5
b = 3
print(a ** b) # 125
比较运算符
>
<
>=
<=
==
!=
与其他语言不同的是, python的比较运算符可以级联使用
省去了逻辑与逻辑或的操作
a = 5
b = 3
c = 2
print(a > b > c) # True
print(a == b == c) # False
print(a >= b >= c) # True
print(a <= b <= c) # False
print(a != b != c) # True
逻辑运算符
要注意python中没有 ! 运算符, 也没有&& 和 || 运算符
它们被替换为not, and, 和 or
a = True
b = False
c = 2
print( a and b) # False
print( a or b ) # True
print( not a ) # False
位运算符
&
|
^
~
>>
<<
位运算与C语言基本一致
取反有些不同,原数取反后得到的是结果数的补码, 要求结果数, 需要三步走, 如原数为101
, 取反运算后得到结果数补码010
- 结果数补码取反得到
101
- 取反后加1得到
110
- 补充原数符号位为结果数符号位
-101
所以~5 = -6
a = 0b1101
b = 0b1011
print("{:b}".format(a & b)) # 1001
print("{:b}".format(a | b)) # 1111
print("{:b}".format(a ^ b)) # 110
print("{:b}".format( ~a )) # -1110 取反运算三步走
print("{:b}".format(a >> 2)) # 11 右移不会补充符号位, 而是补充0
print("{:b}".format(a << 2)) # 110100 左移补充0
成员运算符
in
not in
对容器类数据类型有效
a = "helloo"
b = tuple(a)
c = list(a)
d = {"h":1, "e": 2, "l": 3, "l": 4, "o": 5}
print("he" in a) # True
print("he" in b) # False
print("h" in b) # True
print("e" in c) # True
print("o" in d) # True
print(5 in d) # False
赋值运算符
注意点:
- 赋值符号支持多个变量同时赋值
-
+=
-=
*=
/=
&=
|=
^=
这些都只是普通赋值, 不支持多变量赋值
a, b = 2, 3
print(a, b)