运算符

算数运算符

运算符 含义
+ 加法运算
- 减法运算
* 乘法运算
/1 除法运算
% 取余
// 整除
**2 幂运算

对字符串使用算数运算符

用+对字符进行运算

a = 'hello' + ' ' + 'world'

运算结果: hello world
总结:加法会对字符串进行拼接操作

用*对字符串运算

a = '-' * 20

运算结果:--------------------
总结:可以将字符串重复相应次数

赋值运算符

常见的赋值简写

简写方式 完整版
a += 1 a = a + 1
a -= 1 a = a - 1
a *= 1 a = a * 1
a /= 1 a = a / 1
a %= 1 a = a % 1
a **= 1 a = a ** 1
a //= 1 a = a // 1

比较运算符

常用比较运算符 含义
> 前值是否大于后值
< 前值是否小于后值
>= 前值是否大于等于后值
<= 前值是否大于等于后值
== 前值是否等于后值
is 前值是否ID3等于后值
is not 前值是否ID3等于后值

当对字符串进行比较时

比较运算符根据是否符合运算符条件返回一个布尔值
如果对字符串比较大小,将会比较字符串的ascll码4的大小

a = '11' > '2'
b = 'abc' > 'bc'
c = 'abc' >= 'abcd'

上述三个表达式输出结果均为False
变量a中1的ascll小于2,所以返回false;变量b中a的ascll小于b所以也为False;变量c中abc和abcd因为前三个字母一样,所以比较第四个,第四个为空和d比较,d的ascll值大于空值的,所以也为False。

== 和 is 的区别

a = '1' == '1'
b = '1' is '1'

对两个一样的字符串、整数、浮动等数据不管使用== 还是 is 最后得到的结果都是True,但是如果比例变量,例如。

a = 1 == True
b = 1 is True

在这里a的结果为True,而b的结果为False,虽然布尔值中True就相当于1,但是is比较的是id,并不是数值。从下图可以开出True和1的ID并不相同。可以通过id()的方法查看变量的id。
在这里插入图片描述

逻辑运算符

.逻辑运算符 含义
not 逻辑非
and 逻辑与
or 逻辑或

not:对于布尔值非运算会进行取反对于非布尔值,先将其转换成布尔值再去反。

a = not "hello"
b = not []
print(a, b)

输出结果a变量为False,b变量为True。

因为在将非布尔值转换为布尔值时,0、空串、None等空性的值会转换成False,其他的非布尔值将被转换成True。

and:当符号两侧都是True时才会返回True,否则返回False(找符号两边的false)
or:当符号两侧发现一个是True就会返回True,只有当符合两次都为False时才会返回False(找符号两边的true)

a = 'word' and "hello"
b = 'word' or "hello"
c = None and {}
d = None or {}
print(a, b, c, d)

输出结果:hello word None {}
原因:a中为and找Flast,但是不存在所以默认为后面的值,b中为or,找True,开始就找到True,所以直接返回。c,d同理。
如果and在第一个语句中就找到False或者or在第一个语句中找到True时,就会直接返回第一个语句,不会继续往下计算。

a = None and 0/0
b = 'word' or 0/0
print(a, b)

输出结果:None word
此语句中又0/0但因为在and和or在第一个语句就结束继续往下执行,所以并不会报错。

条件运算符

语法: 语句1 if 条件表达式 else 语句2
条件运算符执行时,会优先对表达式进行判断,判断结果如果为True,则执行语句一,判断结果如果为False,则执行语句二。

print('python') if True else print('java')
# 比较a,b,c的大小
a = 10
b = 22
c = 44
 # 方法一
max = a if a > b else b
max = max if man > c else c
 # 方法二
max = a if (a > b and a > c) else (b if b > c else c)
 # 方法三
max = a if a > (b if b > c else c) else (b if b > c else c)
print(max)

海象运算符(赋值表达式)

海象运算符是Python3.8中的一个新特性,可在表达式内部为变量赋值,有利于降低代码的复杂性来提高可读性,但如果在相对复杂的条件下使用,可能会适得其反,降低了代码的可读性,官方建议在清晰的场合中在使用海象运算符。
语法: :=

m = 1
if m >= 5:
    print('我大于五')
else:
    print('我连五都不到')

if m := 6 >= 5:
    print('我被搞大了')
elif m < 5:
    print('我被搞了却没大')

print(m)
 # 最终输出的结果为: 我连五都不到 我被搞大了 True

运算符的优先级

优先级高的优先计算,优先级一样的从左往右依次计算(此为3.8官方文档数据)

优先级 运算符 描述
1 (experession,…),[expression,…],{key:datum,…},{expression,…} 绑定或元组显示,列表显示,字典显示,设置显示
2 x[index],x[index:index],f(arguments…),x.attribute 抽取(下标)切片(寻址段)调用(函数调用),属性引用
3 await x await表达式
4 ** 乘方
5 +x,-x,~x 正,负,按位非 NOT
6 *,/,%,//,@ 乘法、除法、取余、整除、矩阵乘
7 +,- 加法与减法
8 <<,>> 移位
9 & 按位与AND
10 ^ 按位异或XOR
11 | 按位或OR
12 <,<=,>,>=,!=,==,in,not in,is,is not 比较运算,包括成员检测和标识号检测
13 not x 布尔逻辑“非” NOT
14 and 布尔逻辑“与” AND
15 or 布尔逻辑“或” OR
16 if–else 条件表达式
17 lambda Lambda表达式
18 := 海象运算符

  1. 做除法运算(/)时返回值会是一个float(浮点型) ↩︎

  2. 当对一个小数幂运算(**)的时候就相当于开方,开方返回的值也会是一个float(浮点型) ↩︎

  3. 每一个值都有唯一一个ID,切每个值的ID都不同于其他的ID ↩︎ ↩︎

  4. 可以使用ord()函数查看字符所对应的ascll码 ↩︎