syntax – How can I do a line break (line continuation) in Python?

syntax – How can I do a line break (line continuation) in Python?

What is the line? You can just have arguments on the next line without any problems:

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

Otherwise you can do something like this:

if (a == True and
    b == False):

or with explicit line break:

if a == True and 
   b == False:

Check the style guide for more information.

Using parentheses, your example can be written over multiple lines:

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

The same effect can be obtained using explicit line break:

a = 1 + 2 + 3 + 
    4 + 5

Note that the style guide says that using the implicit continuation with parentheses is preferred, but in this particular case just adding parentheses around your expression is probably the wrong way to go.

From PEP 8 — Style Guide for Python Code:

The preferred way of wrapping long lines is by using Pythons implied line continuation inside parentheses, brackets and braces. Long lines can be broken over multiple lines by wrapping expressions in parentheses. These should be used in preference to using a backslash for line continuation.

Backslashes may still be appropriate at times. For example, long, multiple with-statements cannot use implicit continuation, so backslashes are acceptable:

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())

Another such case is with assert statements.

Make sure to indent the continued line appropriately. The preferred place to break around a binary operator is after the operator, not before it. Some examples:

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 dont think so -- values are %s, %s %
                             (width, height))
        Blob.__init__(self, width, height,
                      color, emphasis, highlight)file_2.write(file_1.read())

PEP8 now recommends the opposite convention (for breaking at binary operations) used by mathematicians and their publishers to improve readability.

Donald Knuths style of breaking before a binary operator aligns operators vertically, thus reducing the eyes workload when determining which items are added and subtracted.

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

Donald Knuth explains the traditional rule in his Computers and Typesetting series: Although formulas within a paragraph always break after binary operations and relations, displayed formulas always break before binary operations[3].

Following the tradition from mathematics usually results in more readable code:

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

In Python code, it is permissible to break before or after a binary operator, as long as the convention is consistent locally. For new code Knuths style is suggested.

[3]: Donald Knuths The TeXBook, pages 195 and 196

syntax – How can I do a line break (line continuation) in Python?

The danger in using a backslash to end a line is that if whitespace is added after the backslash (which, of course, is very hard to see), the backslash is no longer doing what you thought it was.

See Python Idioms and Anti-Idioms (for Python 2 or Python 3) for more.

Leave a Reply

Your email address will not be published. Required fields are marked *