我可以在Python中用一行写if else语句吗?
我不是在说三元运算符。我想知道是否可以在一个值表达式之外,把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
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
,并存储这个预先构建好的常量。现在速度的损失消失了,所以开始使用集合表示法来写成员测试是很实际的。