我刚刚在一些开源 Python 中看到了这个习语,结果被饮料呛到了。
而不是:
if isUp: return "Up" else: return "Down"
甚至:
return "Up" if isUp else "Down"
代码如下:
return isUp and "Up" or "Down"
我可以看到这是相同的结果,但这是 Python 中的典型习惯用法吗?如果是这样,是不是一些运行速度快的性能黑客?还是只是需要代码审查的一次性问题?
确实是一个有效的Python 习惯用法,但大多数情况下不推荐使用,因为与使用简单或三元条件表达式相比,它可能产生歧义且可读性较差。if-else
if-else
在 Python 中,and和or是短路逻辑运算符,这意味着:
and
or
因此,在表达式 中isUp and "Up" or "Down",如果isUp为True(或任何真值),则运算结果and为"Up",然后由于其为真而or返回。如果为(或任何假值),则运算将返回,然后运算将评估第二部分,因为为假值。"Up"``isUp``False``and``False``or``"Down"``False
isUp and "Up" or "Down"
isUp
True
"Up"
"Up"``isUp``False``and``False``or``"Down"``False
# When isUp is True isUp = True result = isUp and "Up" or "Down" print(result) # Output: "Up" # When isUp is False isUp = isUp = Fa False result = isUp and "Up" or "Down" print(result) # Output: "Down"
False
0
None``''
``` isUp = 0 # or isUp = None, ‘’, etc. result = isUp result = isU
resul and “Up” or “Down” print(result) # This will output “Down”, even if you expect it to be “Up” ```
可读性:
exp
x if condition else y
这种方法不是性能优化and和or),if-else和三元组
避免使用这个成语遗留代码或
相反,使用清晰的三元表达式或
统计
或者更传统的
``` if isUp: return “Up” else:
retur
return “Down” ```
总而言之,虽然这个习语isUp and "Up" or "Down"是技术性的isUp我False,一个