三元返回/分配与传统的if-else块相比

时间:2014-01-29 06:34:37

标签: python coding-style pep8

PEP 8不鼓励使用复合语句,但我找不到任何关于Python的三元/条件语法的建议用法。例如:

return x if n == 0 else y
i = x if n == 0 else y if n == 1 else z

是否存在关于上述陈述是否应优先于更传统的if / else块的约定?

if n == 0:
    return x
return y

if n == 0:
    i = x
elif n == 1:
    i = y
else:
    i = z

2 个答案:

答案 0 :(得分:2)

通常应首选“传统的if / else块”。

您仍然希望使用三元运算符的唯一地方是语法需要表达式的地方,例如在lambda表达式中。即使在那里,只有在三元表达式简短且可读时才会这样做(当然,可读性是主观的......)

你总是可以用一个小函数替换一个lambda表达式,但是在你认为会降低代码可读性的地方,可以使用短三元运算的lambda表达式。

答案 1 :(得分:1)

我同意shx2的评论。

另一个考虑因素是可测试性......使用三元expr将所有逻辑放在一行/ expr上。基本的行基代码覆盖工具不会很好地读取测试的真实覆盖率。

使用传统的is / else块可以提供更好的读数。