运算符
算数运算符
运算符 | 含义 |
---|---|
+ | 加法运算 |
- | 减法运算 |
* | 乘法运算 |
/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 | := | 海象运算符 |