代码之家  ›  专栏  ›  技术社区  ›  Ray

如何在Python中执行换行(换行)操作?

  •  871
  • Ray  · 技术社区  · 16 年前

    我有一行很长的代码,我想在多行中分解。我使用什么,语法是什么?

    例如,添加一组字符串,

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

    把它分成两行:

    e = 'a' + 'b' +
        'c' + 'd'
    
    8 回复  |  直到 6 年前
        1
  •  992
  •   Michael Anderson    13 年前

    线路是什么?您可以在下一行使用参数,而不会出现任何问题:

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

    否则,您可以这样做:

    if a == True and \
       b == False
    

    检查 style guide 更多信息。

    从示例行:

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

    或:

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

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

        2
  •  189
  •   Mathmagician jfs    9 年前

    Style Guide for Python Code :

    包装长线的首选方法是在括号、括号和大括号内使用python的隐含行继续符。 通过将表达式括在括号中,可以在多行上打断长行。这些应该优先使用反斜杠作为行继续符。

    反斜杠有时仍然合适。例如,long,multiple 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现在建议 相反的惯例 (用于打破二进制运算)数学家及其出版商用来提高可读性。

    唐纳德·克努斯的突破风格 之前 二元运算符垂直对齐运算符,从而在确定添加和减去哪些项时减少眼睛的工作量。

    PEP8: Should a line break before or after a binary operator? :

    DonaldKnuth在他的计算机和排版系列文章中解释了传统的规则:“尽管段落中的公式总是在二进制运算和关系之后中断,但显示的公式总是在二进制运算之前中断”[3]。

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

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

    在Python代码中,只要约定在本地一致,就允许在二进制运算符之前或之后中断。对于新代码,建议使用Knuth的样式。

    【3】:唐纳德·克努斯的《特克斯本》,第195和196页。

        3
  •  61
  •   Ted Pudlik    11 年前

    使用反斜杠结束一行的危险是,如果在反斜杠后面加上空格(当然,很难看到),反斜杠就不再像你想象的那样做了。

    参见python习语和反习语(用于 Python 2 Python 3 更多。

        4
  •  21
  •   Konrad Rudolph    16 年前

    可以在括号和大括号之间换行。此外,还可以附加反斜杠字符 \ 到要显式中断它的行:

    x = (tuples_first_value,
         second_value)
    y = 1 + \
        2
    
        5
  •  20
  •   SCdF    16 年前

    放一个 \ 在行尾或用括号括起来 ( .. ) . 从 IBM :

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

    b = (i1 < 20) and \
        (i2 < 30) and \
        (i3 < 40)
    
        6
  •  17
  •   Jason Navarrete    8 年前

    从马嘴里: Explicit line joining

    两条或多条物理线可能是 使用连接到逻辑行 反斜杠字符( \ )如下: 当物理行在 不是字符串一部分的反斜杠 文本或注释,它与 以下构成单个逻辑 行,删除反斜杠和 在行尾字符之后。为了 例子:

    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
    

    以反斜杠结尾的行不能 发表评论。反斜杠不能 继续评论。反斜杠可以 除字符串外,不继续标记 文字(即除 字符串文本不能拆分为 使用反斜杠的物理行)。一 反斜杠在 字符串文本外的行。

        7
  •  2
  •   Hardik Sondagar    6 年前

    可能不是pythonic方法,但我通常使用带有join函数的list来编写像SQL查询这样的长字符串。

    query = " ".join([
        'SELECT * FROM "TableName"',
        'WHERE "SomeColumn1"=VALUE',
        'ORDER BY "SomeColumn2"',
        'LIMIT 5;'
    ])
    
        8
  •  0
  •   ivanleoncz velhala    6 年前

    摘自《蟒蛇漫游指南》( Line Continuation ):

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

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

    然而 ,通常情况下,必须拆分一个较长的逻辑行是您试图同时执行过多操作的迹象,这可能会妨碍可读性。

    尽管如此,这里有一个关于多重进口的例子(当超过 line limits, defined on PEP-8 ):

    from app import (
        app, abort, make_response, redirect, render_template, request, session
    )