我可以在Python中用一行写if else语句吗?

1 投票
4 回答
850 浏览
提问于 2025-04-18 01:31

我不是在说三元运算符。我想知道是否可以在一个值表达式之外,把if else语句写成一行?我想把这段代码缩短一些。

if x == 'A':
    return True
if x == 'B':
    return True
if x == 'C':
    return True
return False

4 个回答

1

如果你需要对一系列的项目进行相同的测试,可以考虑使用 any 这个函数:

return any(x == c for c in "ABC")

这个函数适合用在那些比简单的相等比较更复杂的测试上(也就是说 in 不能处理的情况),还有那些太长而无法用链式条件表达式的序列。比如说,我们可以考虑对浮点数进行“近似相等”的测试:

return any(abs(x - n) < epsilon for n in big_sequence_of_floats)
4

如果你的检查条件比简单的判断某个元素是否在一个集合中要复杂,而且你想减少代码的行数,可以使用条件表达式

return True if x == 'A' else True if x == 'B' else True if x == 'C' else False
5

你可以通过使用 in 来简化你的代码:

return x in ("A", "B", "C")

或者,如果 x 是一个单独的字符:

return x in "ABC"
6

你可以这样使用 in 操作符:

return x in ('A', 'B', 'C')

对于 Python 3.2 及以上版本

return x in {'A', 'B', 'C'}

来自 文档

Python 的小优化器现在可以识别像 x in {1, 2, 3} 这样的模式,这表示在一组常量中进行成员测试。优化器会把 set 转换成 frozenset,并存储这个预先构建好的常量。

现在速度的损失消失了,所以开始使用集合表示法来写成员测试是很实际的。

撰写回答