我有一长行代码,我想将其分成多行。我该使用什么以及语法是什么?

例如,添加一堆字符串,

e = 'a' + 'b' + 'c' + 'd'

并将其分成两行,如下所示:

e = 'a' + 'b' +
    'c' + 'd'
有帮助吗?

解决方案

线是什么?您可以在下一行中添加参数而不会出现任何问题:

a = dostuff(blahblah1, blahblah2, blahblah3, blahblah4, blahblah5, 
            blahblah6, blahblah7)

否则你可以这样做:

if a == True and \
   b == False

检查 时尚指南 了解更多信息。

从您的示例行:

a = '1' + '2' + '3' + \
    '4' + '5'

或者:

a = ('1' + '2' + '3' +
    '4' + '5')

请注意,样式指南指出,首选使用带括号的隐式延续,但在这种特殊情况下,仅在表达式周围添加括号可能是错误的方法。

其他提示

Python 代码风格指南:

换行长行的首选方法是在圆括号、方括号和大括号内使用 Python 的隐式续行。 通过将表达式括在括号中,可以将长行分成多行。应优先使用这些内容而不是使用反斜杠来继续行。

反斜杠有时仍然是合适的。例如,长的多个 with 语句不能使用隐式延续,因此反斜杠是可以接受的:

with open('/path/to/some/file/you/want/to/read') as file_1, \
        open('/path/to/some/file/being/written', 'w') as file_2:
    file_2.write(file_1.read())

另一个这样的情况是断言语句。

确保适当缩进续行。打破二元运算符的首选位置是 运算符,而不是其之前。一些例子:

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)

编辑:PEP8 现在推荐 相反的惯例 (用于破坏二进制运算)被数学家及其出版商用来提高可读性。

唐纳德·高德纳 (Donald Knuth) 的突破风格 二元运算符将运算符垂直对齐,从而减少了确定添加和减去哪些项目时眼睛的工作量。

PEP8:应该在二元运算符之前还是之后换行?:

Donald Knuth 在他的计算机和排版系列中解释了传统规则:“虽然段落中的公式总是在二元运算和关系之后中断,但显示的公式总是在二元运算之前中断”[3]。

遵循数学传统通常会产生更具可读性的代码:

# Yes: easy to match operators with operands
income = (gross_wages
          + taxable_interest
          + (dividends - qualified_dividends)
          - ira_deduction
          - student_loan_interest)

在 Python 代码中,只要约定在本地一致,就允许在二元运算符之前或之后中断。对于新代码,建议采用 Knuth 风格。

[3]:Donald Knuth 的 The TeXBook,第 195 和 196 页

使用反斜杠结束一行的危险在于,如果在反斜杠后面添加空格(当然,很难看到),则反斜杠将不再执行您想象的操作。

请参阅 Python 习语和反习语(例如 蟒蛇2 或者 蟒蛇3)了解更多。

放一个 \ 在行尾或将语句括在括号中 ( .. ). 。从 国际商业机器公司:

b = ((i1 < 20) and
     (i2 < 30) and
     (i3 < 40))

或者

b = (i1 < 20) and \
    (i2 < 30) and \
    (i3 < 40)

您可以在括号和大括号之间换行。此外,您可以附加反斜杠字符 \ 到一行来明确地打破它:

x = (tuples_first_value,
     second_value)
y = 1 + \
    2

从马嘴里说: 显式线加入

使用后斜切字符可以将两个或多个物理线路连接到逻辑线上(\), 如下:当物理线以不属于字符串文字或注释的一部分的后斜线结束时,它将与以下形成单个逻辑线相结合,删除后斜线和以下末端字符。例如:

if 1900 < year < 2100 and 1 <= month <= 12 \
   and 1 <= day <= 31 and 0 <= hour < 24 \
   and 0 <= minute < 60 and 0 <= second < 60:   # Looks like a valid date
        return 1

以后斜线结尾的线无法发表评论。后斜线不会继续发表评论。除字符串文字外,后斜线不会继续一个令牌(即,除了字符串文字以外的其他字符串文字以外,不能使用后斜线在物理线上划分)。在字符串字面的一条线上,在其他地方的其他地方是非法的。

可能不是 pythonic 方式,但我通常使用带有 join 函数的列表来编写长字符串,如 SQL 查询。

query = " ".join([
    'SELECT * FROM "TableName"',
    'WHERE "SomeColumn1"=VALUE',
    'ORDER BY "SomeColumn2"',
    'LIMIT 5;'
])

摘自《Python 漫游指南》(线路延续):

当逻辑代码行超过可接受的限制时,您需要将其拆分为多个物理行。如果行的最后一个字符是反斜杠,Python 解释器将连接连续行。这在某些情况下很有用,但通常应该避免,因为它很脆弱:在反斜杠之后添加到行尾的空格会破坏代码并可能产生意外结果。

更好的解决方案是在元素周围使用括号。 如果行尾有未闭合的括号,Python 解释器将连接下一行,直到括号闭合。同样的行为也适用于大括号和方括号。

然而, 通常,必须分割很长的逻辑行表明您试图同时做太多事情,这可能会妨碍可读性。

话虽如此,这是一个关于多次导入的示例(当超过 线路限制,在 PEP-8 中定义):

from app import (
    app, abort, make_response, redirect, render_template, request, session
)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top