PEP 8 建议使用括号,这样你就不需要了,并且温和地建议在二元运算符之前\
而不是在它们之后中断。因此,格式化代码的首选方式是这样的:
my_var = (somethinglikethis
.where(we=do_things)
.where(we=domore)
.where(we=everdomore))
两个相关的段落是来自最大线长度部分的一个:
包装长行的首选方法是在括号、方括号和大括号内使用 Python 的隐含行继续。通过将表达式括在括号中,可以将长行分成多行。这些应该优先使用反斜杠来继续行。
...以及整个应该在二元运算符之前或之后换行吗?部分:
应该在二元运算符之前还是之后换行?
几十年来,推荐的风格是在二元运算符之后打破。但这会以两种方式损害可读性:运算符倾向于分散在屏幕上的不同列中,并且每个运算符都从其操作数移到上一行。在这里,眼睛必须做额外的工作来分辨哪些项目被添加,哪些被减去:
# No: operators sit far away from their operands
income = (gross_wages +
taxable_interest +
(dividends - qualified_dividends) -
ira_deduction -
student_loan_interest)
为了解决这个可读性问题,数学家和他们的出版商遵循相反的约定。Donald Knuth 在他的计算机和排版系列中解释了传统规则:“虽然段落中的公式总是在二元运算和关系之后中断,但显示的公式总是在二元运算之前中断”
遵循数学的传统通常会产生更具可读性的代码:
# Yes: easy to match operators with operands
income = (gross_wages
+ taxable_interest
+ (dividends - qualified_dividends)
- ira_deduction
- student_loan_interest)
在 Python 代码中,允许在二元运算符之前或之后中断,只要约定在本地是一致的。对于新代码,建议使用 Knuth 的样式。
请注意,如上面的引用所示,PEP 8曾经给出关于在哪里突破运算符的相反建议,下面引用以供后代使用:
包装长行的首选方法是在括号、方括号和大括号内使用 Python 的隐含行继续。通过将表达式括在括号中,可以将长行分成多行。这些应该优先使用反斜杠来继续行。确保适当缩进续行。打破二元运算符的首选位置是在运算符之后,而不是在它之前。一些例子:
class Rectangle(Blob):
def __init__(self, width, height,
color='black', emphasis=None, highlight=0):
if (width == 0 and height == 0 and
color == 'red' and emphasis == 'strong' or
highlight > 100):
raise ValueError("sorry, you lose")
if width == 0 and height == 0 and (color == 'red' or
emphasis is None):
raise ValueError("I don't think so -- values are %s, %s" %
(width, height))
Blob.__init__(self, width, height,
color, emphasis, highlight)