文章目录
- 四、运算符
- 1. 算术运算符
- - divmod()函数(了解)
- - 数字型变量 之间可以直接计算
- - 运算符的字符串使用
- 2. 赋值运算符和复合赋值运算符
- 3. 比较(关系)运算符
- 4. 逻辑运算符
- - 逻辑运算符
- - 逻辑运算符计算
- 5. 同一运算符( is 和 is not)(身份运算符)
- - 同一运算符
- - is 与 == 区别:
- - 数字类型和字符串类型数据的缓存区(了解)
- - 整数缓存问题
- - 字符缓冲问题
- 6. 运算符的补充(未讲)
- 1. 比较运算符连用
- 3. 加法操作(待定)
- 4. 乘法操作 (待定)
- 2. 位运算(了解)
- 5. 复合位运算(了解)
- 7. 运算符优先级
四、运算符
1. 算术运算符
算数运算符是 运算符的一种
运算符 | 描述 | 实例 |
+ | 加 | 10 + 20 = 30 |
- | 减 | 10 - 20 = -10 |
* | 乘 | 10 * 20 = 200 |
/ | 除 | 10 / 20 = 0.5 |
// | 取整除 (地板除) | 返回除法的整数部分(商) 9 // 2 输出结果 4(向下取整) eg. -10 // 3 = -4,10 // 3 = 3 |
% | 取余数 (取模) | 返回除法的余数 eg. 9 % 2 = 1 |
** | 幂 | 又称次方、乘方 |
优先级
- 和数学中的运算符的优先级一致,在 Python 中进行数学计算时,同样也是:
- 先乘除后加减
- 同级运算符是 从左至右 计算
- 可以使用
()
调整计算的优先级
- 以下表格的算数优先级由高到最低顺序排列
运算符 | 描述 |
() | 用来调整优先级 |
** | 幂 (最高优先级) |
* / % // | 乘、除、取余数、取整除 |
+ - | 加法、减法 |
- divmod()函数(了解)
divmod(被除数, 除数)
:同时得到商和余数,返回值是元组
- 数字型变量 之间可以直接计算
- 在 Python 中,两个数字型变量是可以直接进行 算数运算的
- 如果变量是
bool
型,在计算时
-
True
对应的数字是1
-
False
对应的数字是0
- 自动转型:整数和浮点数混合运算时,表达式结果自动转型成浮点数。比如:2+8.0 的结果是 10.0
- 运算符的字符串使用
-
+
:连接字符串
print('1' + '2') # 输出12
print('1' + 1) # 错误
-
*
:重复字符串
在 Python 中 *
运算符还可以用于字符串,计算结果就是字符串重复指定次数的结果
print("-" * 50) # 输出'----------------------------------------'
2. 赋值运算符和复合赋值运算符
使用 =
可以给变量赋值
格式:变量 = 值或变量
赋值运算符 | 描述 | 实例 |
= | 简单的赋值运算符 | c = a + b 将 a + b 的运算结果赋值为 c |
复合赋值运算符 | ||
+= | 加法赋值运算符 | 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 |
3. 比较(关系)运算符
- 关系运算符的结果是bool类型
运算符 | 描述 |
== | 检查两个操作数的值是否 相等,如果是,则条件成立,返回 True |
!= | 检查两个操作数的值是否 不相等,如果是,则条件成立,返回 True |
> | 检查左操作数的值是否 大于 右操作数的值,如果是,则条件成立,返回 True |
< | 检查左操作数的值是否 小于 右操作数的值,如果是,则条件成立,返回 True |
>= | 检查左操作数的值是否 大于或等于 右操作数的值,如果是,则条件成立,返回 True |
<= | 检查左操作数的值是否 小于或等于 右操作数的值,如果是,则条件成立,返回 True |
Python 2.x 中判断 不等于 还可以使用
<>
运算符
!=
在 Python 2.x 中同样可以用来判断 不等于
4. 逻辑运算符
- 逻辑运算符
- 逻辑运算符的结果是bool类型
运算符 | 逻辑表达式 | 描述 |
and | x and y | 只有 x 和 y 的值都为 True,才会返回 True 否则只要 x 或者 y 有一个值为 False,就返回 False |
or | x or y | 只要 x 或者 y 有一个值为 True,就返回 True 只有 x 和 y 的值都为 False,才会返回 False |
not | not x | 如果 x 为 True,返回 False 如果 x 为 False,返回 True |
# 逻辑与:理解成乘法,True = 1,False = 0
print(True and True) # True
print(True and False) # False
print(False and True) # False
print(False and False) # False
# 逻辑或:理解成加法,True = 1,False = 0
print(True or True) # True
print(True or False) # True
print(False or True) # True
print(False or False) # False
# 逻辑非
print(not True) # False
print(not False) # True
- 逻辑运算符计算
- 当逻辑运算符两侧都是数字时
print(1 and 2 and 3) # 输出3 ,输出最右边的and后的值
# 过程:先1and2,得2真,然后2and3,得3真,表达式得3
print(0 and 2 and 3) # 输出0
# 过程:0 and 2 假,0已经为假,直接输出0
print(1 or 2 or 3) # 输出1 ,输出最左边的or前的值
# 过程:1 or 2, 1已经为真,不用继续算了,输出1
print(0 or 2 or 3) # 输出2
# 过程:
print(0 or 0 or 3) # 输出3
# 过程:
5. 同一运算符( is 和 is not)(身份运算符)
- 同一运算符
同一运算符用于比较两个对象的存储单元,实际比较的是对象的地址
运算符 | 描述 |
is | is 是判断两个标识符是不是引用同一个对象 |
is not | is not 是判断两个标识符是不是引用不同对象 |
- is 与 == 区别:
- is 用于判断两个变量引用对象是否为同一个,既比较对象的地址。
- == 用于判断引用变量 引用 对象的值是否相等,默认调用对象的
__eq__()
方法
a=100000
b=100000
print(a==b) # True
print(id(a)==id(b)) # False id不同
print(a is b) # True False id不同
- 数字类型和字符串类型数据的缓存区(了解)
为了在程序中使用数据时,效率更高,ptyhon解释会在程序加载后,产生一个缓存区,缓存区中存放是常用的数据
- 数字(整数):-5 ~ 255
- 数字在255范围内,仅适用于字面量或字面量的运算才缓存,和变量相加等不适用于缓存区
- 字符串:长度为小于20的字符串
- 字符串仅适用于字面量或字面量的拼接,和变量的拼接等产生的都不适用于缓存区
- 整数缓存问题
当python对整数对象进行缓存,则有
a = 100
b = 100
c = 50
d = 50
print(a == b) # True
print(id(a) == id(b)) # True id相同
print(a is b) # True id相同
s1 = c + d
s2 = c + 50
s3 = 50 + 50
print(a is s1) # True id相同
print(a is s2) # True id相同
print(a is s3) # True id相同
a = 1000
b = 1000
c = 500
d = 500
print(a == b) # True
print(id(a) == id(b)) # True id相同
print(a is b) # True id相同
s1 = c + d
s2 = c + 500
s3 = 500 + 500
print(a is s1) # False id相同
print(a is s2) # False id相同
print(a is s3) # True id相同
命令行中执行:(范围为[-5, 256])
- Python 仅仅对比较小的整数对象进行缓存(范围为[-5, 256])缓存起来,而并非是所有整数对象。
Pycharm 或者保存为文件执行:(范围是[-5,任意正整数])
- 在 Pycharm 或者保存为文件执行,结果是不一样的,这是因为解释器做了一部分优化(范围是[-5,任意正整数])
- 字符缓冲问题
见字符串部分
总结
-
is
比较两个对象的 id 值是否相等,是否指向同一个内存地址; -
==
比较的是两个对象的内容是否相等,值是否相等; - 小整数对象 [-5,256] 在全局解释器范围内被放入缓存供重复使用;
-
is
运算符比==
效率高, - 在
变量
和None
进行比较时,应该使用is
。
6. 运算符的补充(未讲)
1. 比较运算符连用
比较运算符可以连用,并且含义和我们日常使用完全一致。
a = 4
print(3<a<10) # True 关系运算符可以连用
3. 加法操作(待定)
- 数字相加
3+2 ==> 5 - 字符串拼接
“3”+“2”==> “32” - 列表、元组等合并
[10,20,30]+[5,10,100] ==>[10,20,30,5,10,100]
4. 乘法操作 (待定)
- 数字相乘
32 ==> 6 - 字符串复制
“sxt”*3 ==> ”sxtsxtsxt” - 列表、元组等复制
[10,20,30]*3 ==> [10,20,30,10,20,30,10,20,30]
2. 位运算(了解)
运算符 | 描述 | 实例 |
& | 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 | (a & b) 输出结果 12 ,二进制解释: 0000 1100 |
| | 按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。 | (a | b) 输出结果 61 ,二进制解释: 0011 1101 |
^ | 按位异或运算符:当两对应的二进位相异时,结果为1 | (a ^ b) 输出结果 49 ,二进制解释: 0011 0001 |
~ | 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1 。~x 类似于 -x-1 | (~a ) 输出结果 -61 ,二进制解释: 1100 0011,在一个有符号二进制数的补码形式。 |
<< | 左移动运算符:运算数的各二进位全部左移若干位,由 << 右边的数字指定了移动的位数,高位丢弃,低位补0。 | a << 2 输出结果 240 ,二进制解释: 1111 0000 |
>> | 右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,>> 右边的数字指定了移动的位数 | a >> 2 输出结果 15 ,二进制解释: 0000 1111 |
a = 0b11001
b = 0b01000
c = a|b
bin(c) #bin()可以将数字转成二进制表示
'0b11001' >>> bin(c&b)
'0b1000' >>> bin(c^b)
'0b10001' >>> a = 3
a<<2 #左移 1 位相当于乘以 2.左移 2 位,相当于乘以 4
12
a = 8
a>>1 #右移 1 位相当于除以 2.
5. 复合位运算(了解)
运算符 | 描述 | 示例 | 等价于 |
<<= | 左移赋值 | a<<=2 | a = a<<2 |
>>= | 右移赋值 | a>>=2 | a = a>>2 |
&= | 按位与赋值 | a&=b | a = a&b |
|= | 按位或赋值 | a|=b | a=a|b |
^= | 按位异或赋值 | a^=b | a = a^b |
7. 运算符优先级
运算符 | 位运算 | 描述 |
** | 幂 (最高优先级) | |
~ | 按位翻转【了解】 | |
* / % // | 乘、除、取余数、取整除 | |
+ - | 加法、减法 | |
>> << | 右移,左移运算符【了解】 | |
& | 位 ‘AND’【了解】 | |
^ | | 位运算符【了解】 | |
<= < > >= | 比较运算符 | |
== != | 等于运算符 | |
= %= /= //= -= += *= **= | 赋值运算符 | |
is、is not | 身份运算符 | |
in、not in | 成员运算符 | |
not or and | 逻辑运算符 |
实际使用中,记住如下简单的规则即可,复杂的表达式一定要使用小括号组织。 1. 乘除优先加减 2. 位运算和算术运算>比较运算符>赋值运算符>逻辑运算符