如何在Python三元运算符上换行?

时间:2015-03-06 10:37:51

标签: python line-breaks

有时Python中包含三元运算符的行太长了:

answer = 'Ten for that? You must be mad!' if does_not_haggle(brian) else "It's worth ten if it's worth a shekel."

是否建议使用三元运算符将换行符设置为79个字符?我没有在PEP 8中找到它。

3 个答案:

答案 0 :(得分:32)

您始终可以使用括号扩展logical line across multiple physical lines

answer = (
    'Ten for that? You must be mad!' if does_not_haggle(brian)
    else "It's worth ten if it's worth a shekel.")

这称为implicit line joining

以上使用PEP8所有 - 缩进 - 一步多样式(称为hanging indent)。您还可以缩进多余的行以匹配左括号:

answer = ('Ten for that? You must be mad!' if does_not_haggle(brian)
          else "It's worth ten if it's worth a shekel.")

但是这会让你更快地达到80列的最大值。

精确地放置ifelse部分取决于您;我在上面使用了我的个人偏好,但是没有任何人同意的运营商的具体风格。

答案 1 :(得分:26)

PEP8说preferred way of breaking long lines is using parentheses

  

包装长行的首选方法是使用Python的暗示   括号,括号和括号内的行继续。排长龙   可以通过包装表达式来分解多行   括弧。这些应该优先使用反斜杠   换行。

answer = ('Ten for that? You must be mad!'
          if does_not_haggle(brian)
          else "It's worth ten if it's worth a shekel.")

答案 2 :(得分:2)

请记住来自 Python的禅宗的建议: "可读性计数。"

当三元运算符全部在一行上时,它是最可读的。

x = y if z else w

当您的条件或变量超过79个字符(参见PEP8)时,可读性开始受损。 (可读性也是为什么dict / list comprehension最好保持简短的原因。)

因此,如果将其转换为常规if块,您可能会发现它更具可读性,而不是尝试使用括号来破坏该行。

if does_not_haggle(brian):
    answer = 'Ten for that? You must be mad!'
else:
    answer = "It's worth ten if it's worth a shekel."

奖励:上述重构揭示了另一个可读性问题:does_not_haggle是反转逻辑。如果您可以重写函数,那将更具可读性:

if haggles(brian):
    answer = "It's worth ten if it's worth a shekel."
else:
    answer = 'Ten for that? You must be mad!'