小能豆

这个习语符合 Python 风格吗?(someBool 和“True Result”或“False Result”)

py

我刚刚在一些开源 Python 中看到了这个习语,结果被饮料呛到了。

而不是:

if isUp:
    return "Up"
else:
    return "Down"

甚至:

return "Up" if isUp else "Down"

代码如下:

return isUp and "Up" or "Down"

我可以看到这是相同的结果,但这是 Python 中的典型习惯用法吗?如果是这样,是不是一些运行速度快的性能黑客?还是只是需要代码审查的一次性问题?


阅读 6

收藏
2024-11-13

共1个答案

小能豆

return isUp and "Up" or "Down"

确实是一个有效的Python 习惯用法,但大多数情况下不推荐使用,因为与使用简单或三元条件表达式相比,它可能产生歧义且可读性较差。if-else

为什么这会起作用?

在 Python 中,andor短路逻辑运算符,这意味着:

  • and如果第一个值是“真”(非零、非无等),则返回第二个值;如果第一个值是“假”,则返回第一个值。
  • or返回第一个“真”值,如果所有都是“假”则返回最后一个值。

因此,在表达式 中isUp and "Up" or "Down",如果isUpTrue(或任何真值),则运算结果and"Up",然后由于其为真而or返回。如果为(或任何假值),则运算将返回,然后运算将评估第二部分,因为为假值。"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"

问题

  1. 带有假值的歧义:此成语的主要问题是它依赖于值的真/假行为,这可能产生歧义且容易出错。例如,如果isUp设置为假值但不完全是假值(False0、、等),此成语可能会产生意外结果: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”
```

  1. 可读性

  2. exp

  3. 这是一个条件表达式,这一点并不明显,因为更常见的是三元表达式x if condition else y,比如

是吗

这种方法不是性能优化andor),if-else和三元组

什么时候

  • 它有时会出现在简洁的代码中,特别是
  • 它可能出现在非常紧凑或模糊的代码中, 但

结论

  • 避免使用这个成语遗留代码

  • 相反,使用清晰的三元表达式或

if-else

统计

return "Up" if isUp else "Down"

或者更传统的

```
if isUp:
return “Up”
else:

  retur

return “Down”
```

总而言之,虽然这个习语isUp and "Up" or "Down"是技术性的isUpFalse,一个

2024-11-13