有时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中找到它。
答案 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.")
以上使用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列的最大值。
精确地放置if
和else
部分取决于您;我在上面使用了我的个人偏好,但是没有任何人同意的运营商的具体风格。
答案 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!'