运算符优先级(从低到高)

运算符 描述
lambda Lambda表达式
or 布尔“或”
and 布尔“与”
not 布尔“非”
in,not in 成员测试
is,is not 同一性测试
<,<=,>,>=,!=,== 比较
| 按位或
^ 按位异或
& 按位与
<<,>> 移位
+,- 加法与减法
*,/,//,% 乘法、除法,整除与取余
+,- 正负号
~ 按位翻转
** 指数
[] [:] 下标,切片

三元运算符

Python中没有专门的三元运算符? :,但可以通过以下方式来实现三元运算符功能。

方式1 on_true if expression else on_false

如果expression为真,返回on_true的值 否则返回on_false的值。

例如:

1
2
3
4
5
6
x=1
y=2
result1 = x if x < y else y
result2 = x if x > y else y
print(result1)  # 1
print(result2)  # 2

方式2 (on_false,on_true) [真或假]

如果[真或假]为真,返回on_true的值 否则返回on_false的值。

在Python中,True等于1,而False等于0,这就相当于在元组中使用0和1来选取数据。

例如:

1
2
3
4
5
6
7
x=1
y=2
result1 = (y,x)[x < y]
result2 = (y,x)[x > y]

print(result1)  # 1
print(result2)  # 2

但是,方式2会引起错误,而if-else在有些场合下,不会抛出错误。

例如:

1
2
3
4
5
6
x=1
y=2
result1 = x if x < y else 1/0  #x < y结果是True,不会执行1/0,结果是1
result2 = x if x > y else 1/0  #x > y结果是False,执行1/0,引起ZeroDivisionError异常
print(result1)
print(result2)

执行以上程序会输出如下结果:

1
2
3
4
Traceback (most recent call last):
  File "main.py", line 4, in <module>
    result2 = x if x > y else 1/0  
ZeroDivisionError: division by zero

例如:

1
2
3
4
5
6
x=1
y=2
result1 = (1/0,x)[x < y]  #计算元组第一个成员1/0的值,引起ZeroDivisionError异常
result2 = (1/0,x)[x > y]  #计算元组第一个成员1/0的值,引起ZeroDivisionError异常
print(result1)
print(result2)

执行以上程序会输出如下结果:

1
2
3
4
Traceback (most recent call last):
  File "main.py", line 3, in <module>
    result1 = (1/0,x)[x < y]
ZeroDivisionError: division by zero

方式3 expression and on_true or on_false

expression为真时,返回on_true,为假时,返回on_false。 and or形式最接近其他语言三元运算符? :

例如:

1
2
3
4
5
6
x=1
y=2
result1 = x < y and x or y
result2 = x > y and x or y
print(result1) # 1
print(result2) # 2

方式4 expression1 and expression2 and expression3

如果expression1,expression12,expression3都为真,则返回最后一个expression3的值。如果其中某些值为假,则返回第一个为假的值。

例如:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
x=1
y=2
result1 = x < y and x and y #都是True,返回最后一个y。也就是2。
result2 = x > y and x and y #x > y是False。
result3 = x and x > y and y #x > y是False。
result4 = x and y and x > y #x > y是False。
print(result1)
print(result2)
print(result3)
print(result4)

执行以上程序会输出如下结果:

1
2
3
4
2
False
False
False

方式5 expression1 or expression2 or expression3

如果expression1,expression12,expression3都为假,返回最后一个expression3的值,如果其中某些值为真,则返回第一个为真的值。x=0

例如:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
y=2
z=0
result1 = x > y or x or z #都是False,返回最后一个z。也就是0。
result2 = x > y or x or y
result3 = x or x < y or y #x < y为True。
result4 = x or y or x > y
print(result1)
print(result2)
print(result3)
print(result4)

执行以上程序会输出如下结果:

1
2
3
4
0
2
True
2

使用场景:在将一个字典更新之后还想要返回更新后的字典,这是我们就可以这样写:dic = dic1.update(dic2) or dic1


转载请注明本网址。