在使用的时候不小心出错才注意到这个,写下来做记录:
python3中没有三目运算符,但是可以用“and”和“or”操作符替代,理解用法即可。如下:
结论汇总: 1. x and y 的值是x或者y, x为真就是y, x为假就是x。 2. x or y 的值是x或者y, x为真就是x, x为假就是y。 3. 在不加括号时候, and优先级大于or。
代码如下:
a1 = "" and None
print("a1:", a1) # a1:'' x and y,如果x、y两个值都为假,返回x;
a2 = "" and 2
print("a2:", a2) # a2:'' x and y,如果x、y中有一个为假,返回该假值;
a3 = 2 and ""
print("a3:", a3) # a3:'' x and y,如果x、y中有一个为假,返回该假值;
a4 = "/" and 3
print("a4:", a4) # a4:3 x and y,如果x、y都为真,返回y;
# 结论:x、y都为字符串时,x and y,如果x为真,返回y; 如果x为假,返回x。
# 分析:x and y,类似于三目运算符 x?y:x,原理在于逻辑判断中的截断原则,
# 如果判断完x为假,则y不需要判断就直接返回结果为假即可,因此返回x.
# 如果判断完x为真,则y的结果即为表达式的结果,因此直接返回y.
b1 = "" or None
print("b1:", b1) # b1:None x or y,如果x、y两个值都为假,返回y
b2 = "" or 2
print("b2:", b2) # b2:2 x or y,如果x、y中有一个为真,返回该真值;
b3 = 2 or ""
print("b3:", b3) # b3:2 x or y,如果x、y中有一个为真,返回该真值;
b4 = "/" or 3
print("b4:", b4) # d:/ x or y,如果x、y都为真,返回x;
# 结论:x、y都为字符串时,x or y,如果x为真,返回x; 如果x为假,返回y。
# 分析:x or y,类似于三目运算符 x?x:y,原理同样在于逻辑判断中的截断原则,
# 如果判断完x为真,则y不需要判断就直接返回结果为假即可,因此返回x.
# 如果判断完x为假,则y的结果即为表达式的结果,因此直接返回y.
e = "" and 2 or 3
print("e:", e) # e:3
f = "/" and 2 or 3
print("f:", f) # f:2 先执行"/" and 2,得到2,再执行2 or 3,得到2
g = "/" or 2 and 3
print("g:", g) # g:/ 先执行2 and 3,得到3,再执行"/" or 3,得到/
# 结论:在不加括号时候, and优先级大于or。
"""
汇总:对python3:
1. x and y 的值是x或者y, x为真就是y, x为假就是x。
2. x or y 的值是x或者y, x为真就是x, x为假就是y。
3. 在不加括号时候, and优先级大于or。
"""