第二篇 Python运算符
1.算术运算符
运算符 |
描述 |
+ |
两个值相加 |
- |
两个值相减 |
* |
两个值相乘 |
/ |
两个值相除 |
% |
得到两个数相除的余数 |
** |
x**y得到x的y次幂 |
// |
返回两个数相除商的整数部分 |
a = 32 b = 19 print("+)返回两个值的和:", a + b) # 51 print("-)返回两个值的差:", a - b) # 13 print("*)返回两个值的乘积:", a * b) # 608 print("/)返回两个值的商:", a / b) # 1.6842105263157894 print("%)返回两个值相除的余数:", a % b) # 11 print("**)返回2的3次幂:", 2 ** 3) # 8 print("//)返回两个值相除的整数部分", a // b) # 1
说明:
- 在Python3中,两个整数相除,得到的结果会是一个浮点数。
- 字符串里有限度的支持加法和乘法运算符,加法运算符用于两个字符串类型时,用来拼接两个字符串。
- *运算符用于字符串和数字,计算的结果就是字符串重复指定次数的结果。
print("*"*30) # ******************************
2.比较运算符
运算符 | 描述 |
== | 比较两个对象是否相等,相等返回true,不相等,返回false |
!= | 比较两个对象是否不相等,不相等返回true,相等返回false |
> | 比较第一个对象是否大于第二个对象,大于,返回true,否则返回false |
< | 比较第一个对象是否小于第二个对象,小于,返回true,否则返回false |
>= | 比较第一个对象是否大于等于第二个对象,大于等于,返回true,否则返回false |
<= | 比较第一个对象是否小于等于第二个对象,小于等于,返回true,否则返回false |
a = 32 b = 32 print("==)比较两个值是否相等:", a == b) # True print("!=)比较两个值是否不相等:", a != b) # False a = 40 b = 32 print(">)比较第一个值是否大于第二个值:", a > b) # True print("<)比较第一个值是否小于第二个值:", a < b) # False b = 40 print(">=)比较第一个值是否大于等于第二个值:", a >= b) # True print("<=)比较第一个值是否小于等于第二个值:", a <= b) # True
比较运算符在字符串里的使用
# 字符串之间使用比较运算符,会根据各个字符的编码值逐一进行比较 # ASCII码表 print('a' > 'b') # False 97 > 98 print('abc' > 'a') # False 97 > 98 # 数字和字符串之间,做==运算的结果是False,做!=结果是True,不支持其他的比较运算。 # print('a' > 90) print('a' == 90) # False print('a' != 90) # True
3.赋值运算符
运算符 | 描述 |
= | 把右边的值赋给左边的 |
+= | 左边的值等于左边的值加上右边的值 |
-= | 左边的值等于左边的值减去右边的值 |
*= | 左边的值等于左边的值乘上右边的值 |
/= | 左边的值等于左边的值除以右边的值 |
%= | 左边的值等于左边的值属于右边的值的余数 |
//= | 左边的值等于左边的值除以右边的值的整数部分 |
**= | 左边的值等于左边的值的右边值的次幂 |
a = 13 b = 6 a += b print("+=):", a) # 19 a = 13 b = 6 a -= b print("-=):", a) # 7 a = 13 b = 6 a *= b print("*=):", a) # 78 a = 13 b = 6 a /= b print("/=):", a) # 2.1666666666666665 a = 13 b = 6 a %= b print("%=):", a) # 1 a = 13 b = 6 a //= b print("//=):", a) # 2 a = 13 b = 6 a **= b print("**=):", a) # 4826809
赋值运算符的特殊场景
# 等号连接的变量可以传递赋值 a = b = c = d = 'hello' print(a, b, c, d) m, n = 3, 5 # 拆包 print(m, n) # 拆包时,变量的个数和值的个数不一致,会报错 # y, z = 1, 2, 3, 4, 5 x = 'hello', 'good', 'yes' print(x) # ('hello', 'good', 'yes') # *表示可变长度 o, *p, q = 1, 2, 3, 4, 5, 6 print(o, p, q) # 1 [2, 3, 4, 5] 6
4.位运算符(了解)
运算符 | 描述 |
& | 按位与运算符,两个值的相应位都为1,该位结果为1,否则为0 |
| | 按位或运算符,两个值的相应位其中一个为1,则该位结果为1,否则为0 |
^ | 按位亦或运算符,两个值的相应位不相同时,则该结果为1,否则为0 |
~ | 按位取反运算符,对数据的每个二进制位取反,即把1变成0,把0变成1 |
<< | 按位左移运算符,把二进制位全部左移若干位 |
>> | 按位右移运算符,把二进制位全部右移若干位 |
a = 5 # 00000101 b = 6 # 00000110 c = a | b print("a|b):", c) # 7 print("a&b):", a & b) # 4 print("~a):", ~a) # ~a=-(a+1) -6 print("a^b):", a ^ b) # 3 print("<<):", a << 2) # 20 print(">>):", a >> 2) # 1
注:按位取反的计算公式:~a=-(a+1),a+1然后加上负号,~12的二进制位00001100,加1之后为00001101,十进制为13,加上负号为-13。
5.逻辑运算符
运算符 | 描述 |
and | 逻辑与,只要一个运算数是False,结果就是False;只有所有的运算数都是True,结果才是True |
or | 逻辑或,只要有一个运算数是True,结果就是True;只有所有的运算数都是False,结果才是False |
not | 逻辑非,如果值为True,则结果为False,如果值为False,则结果为True |
a = 12 b = 13 print("and):", a and b) # 13 a = 1 b = 0 print("and):", a and b) # 0 a = 0 b = 1 print("and):", a and b) # 0 a = 1 b = 0 print("or):", a or b) # 1 a = 0 b = 1 print("or):", a or b) # 1 print("not):", not a) # True print("not):", not b) # False
逻辑运算的短路
4 < 3 and print('你好世界') # 逻辑与运算的短路问题 4 < 3 or print('嘿嘿嘿') # 逻辑或运算的短路问题 # 逻辑运算的结果,一定是布尔值吗?不一定 # 逻辑与运算做取值时,取第一个为False的值;如果所有的运算数都是True,取最后一个值 print(3 and 5 and 0 and 'hello') # 0 print('good' and 'yes' and 'ok' and 100) # 100 # 逻辑或运算做取值时,取第一个为True的值;如果所有的运算数都是False,取最后一个 print(0 or [] or 'lisi' or 5 or 'ok') # lisi print(0 or [] or {} or ()) # ()
说明:
- 在没有()的情况下,优先级:not > and > or,同一优先级从左至右依次计算。
6.成员运算符
运算符 | 描述 |
in | 如果在指定的列表中找到值则返回True,否则返回False |
not in | 如果在指定的列表中没有找到值则返回True,否则返回False |
lists = [1, 2, 3, 4, 5, 6, 7] print("in):", (1 in lists)) # True print("in):", (12 in lists)) # False print("not in):", (12 not in lists)) # True
7.身份运算符
身份运算符是判断两个对象的内存地址是否一样,即是否是同一个对象的引用。
运算符 | 描述 |
is | 判断两个对象的内存地址是否一样 |
is not | 判断两个对象的内存地址是否不一样 |
lists = [1, 2, 3, 4, 5, 6, 7] lists_copy = [1, 2, 3, 4, 5, 6, 7] print("is):", lists is lists_copy) # False print("not is):", lists is not lists_copy) # True print("==):", lists_copy == lists) # True
注:is和==的区别为is判断内存地址是否一样,而==判断的是值是否一样。
8.运算符的优先级
对于运算符的优先级了解即可吧,可以通过括号控制运算符的优先级。