![777f0e4c6bdbbf6ca112c6e6df4fcf81.gif](https://i-blog.csdnimg.cn/blog_migrate/455f07433cb2adb8539c62d4eb1bf6f2.gif)
在上一章中我们讲了算术运算符、比较运算符、赋值运算符、逻辑运算符。本章我们来讲:位运算符、成员运算符、身份运算符。
位运算符
位运算符是把数字变成二进制,一位一位的去进行运算。
位运算符的使用
以下假设 a = 77,b = 11
77 的二进制为:01001101
11 的二进制为:00001011
运算符 | 描述 | 使用 |
& | 按位与运算符 1 & 1 = 1 1 & 0 = 0 | a & b = 9 (00001001) |
| | 按位或运算符 1 | 1 = 1 1 | 0 = 1 0 | 0 = 1 | a | b = 79 (01001111) |
^ | 按位异或运算符 1 ^ 1 = 0 0 ^ 0 = 1 1 ^ 0 = 1 | a ^ b = 70 (01000110) |
~ | 按位取反,0 变 1 , 1 变 0 可以理解为~x = - x - 1 | ~ a = - 78 |
<< | 二进制各位全部左移若干位 "< | 6 << 2 = 24 (00011000) 6 的二进制 00000110 |
>> | 二进制各位全部右移若干位 ">>" 右边的数为指定移动的位数,左边丢弃,右边补0 | 6 >> 2 = 1 (00000001) 6 的二进制 00000110 |
成员运算符
Python 还支持成员运算符,其中包括字符串、列表、元组
成员运算符的使用
以下假设 a = 1,b = 6,c = [1, 2, 3]
运算符 | 描述 | 使用 |
in | 判断某一元素是否在指定序列中,在返回 True,不在返回 False。 | a in c , 返回 True b in c , 返回 False |
not in | 判断某一元素是否在指定序列中,在返回 False,不在返回 True。 | a not in c , 返回 False b not in c , 返回 True |
身份运算符
身份运算符用来比较两个对象的存储单元
身份运算符的使用
运算符 | 描述 | 使用 |
is | is 是判断两个标识符是不是引用同一个对象 | x is y, 类似 id(x) == id(y) , 如果引用的是同一个对象则返回 True,否则返回 False |
is not | is not 是判断两个标识符是不是引用自不同对象 | x is not y , 类似 id(a) != id(b)。如果引用的不是同一个对象则返回结果 True,否则返回 False。 |
id ( ) 函数是用来查看对象的内存地址
is 与 == 的区别
is 用来判断两个变量所引用指向的对象是否为一个
== 用来判断两个引用变量的值是否相等
具体 is 、is not、== 的使用下见图:
(1.1)两个列表(is)比较
(1.2)两个列表(is not)比较
(1.3)两个列表(==)比较
(2.1)两个整数(is)比较
(2.2)两个整数(is not)比较
(2.3)两个整数(==)比较
由上面的图中可以看出一些问题,为什么 a 与 b 长得一模一样,列表的 id 却不相同,整数打印的 id 就相同?
因为在python中所有数字、字符串、list等,创建时会分配一个内存空间,我们的变量通过引用指向的方式来使用他们。
比如上图 a = 10 和 b = 10,他们输出的 id 一样,表示 a 和 b 都指向相同的内存地址,就是说引用了同一个不可变对象。但是 a = [1, 2, 3] 和 b = [1, 2, 3] ,他们输出的 id 不一样,a 和 b 指向的是不同的内存地址,就是说引用了不同的可变对象,并且各可变对象是相互独立,在内存中也有独立的内存地址。
可变类型与不可变类型
可变类型
可变类型有:列表(list)、字典(dict)、集合(set)
理解:可变类型是指对象的内存值可以被改变。当引用改变后,其实是所指的值直接发生改变,并没有复制行为,也没有开辟新的内存地址,通俗点说就是自我改变。
不可变类型
不可变类型有:整型(int)、元组(tuple)、字符串(str)、布尔(bool)
理解:不可变类型是指对象的内存值不可被改变。在 Python 中变量以引用的方式指向对象,如果变量引用了不可变对象,当该变量改变时,由于其所指对象的值不可被改变,相当于把原来的值复制一份后再改变,这时会开辟一个新的地址,变量也将指向这个新的地址,即变量引用了新的对象。
Python运算符优先级
以下运算顺序由高到低:
运算符 | 介绍 |
( ) | 小括号 |
** | 指数 |
~ | 按位取反 |
*、/、//、% | 乘、除、取整、取余 |
+、- | 加、减 |
<> | 位移 |
& | 按位与运算符 |
^ | 按位异或运算符 |
| | 按位或运算符 |
>、>=、 | 比较运算符 |
==、!= | 等于、不等于 |
is、is not | is 运算符 |
in、not in | in 运算符 |
not | 非 |
and | 与 |
or | 或 |
END