Как я могу сделать разрыв строки (продолжение строки) в Python?

StackOverflow https://stackoverflow.com/questions/53162

Вопрос

У меня есть длинная строка кода, которую я хочу разбить на несколько строк.Что я использую и каков синтаксис?

Например, добавление набора строк,

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

Другой подобный случай связан с утверждениями assert.

Убедитесь, что в продолжении строки сделан соответствующий отступ.Предпочтительным местом для обхода двоичного оператора является после оператору, не до этого.Несколько примеров:

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:Должен ли разрыв строки происходить до или после двоичного оператора?:

Дональд Кнут объясняет традиционное правило в своей серии книг " Компьютеры и верстка":"Хотя формулы внутри абзаца всегда прерываются после двоичных операций и отношений, отображаемые формулы всегда прерываются перед двоичными операциями"[3].

Следование математической традиции обычно приводит к получению более читаемого кода:

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

В коде Python допустимо прерывание до или после двоичного оператора, при условии, что соглашение согласовано локально.Для нового кода предлагается стиль Кнута.

[3]:"Учебник Дональда Кнута", страницы 195 и 196

Опасность использования обратной косой черты в конце строки заключается в том, что если после обратной косой черты добавляется пробел (который, конечно, очень трудно увидеть), обратная косая черта больше не выполняет то, что вы думали.

Смотрите Идиомы Python и антиидиомы (для Python 2 или Python 3) для большего.

Поставьте \ в конце вашей строки или заключите утверждение в скобки ( .. ).От IBM:

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

Строка, заканчивающаяся обратной косой чертой, не может содержать комментарий.Обратная косая черта не продолжить комментарий.Обратная косая черта не продолжает токен, за исключением строковых литералов (т.е. токены, отличные от строковых литералов, не могут быть разделены по физическим строкам с помощью обратной косой черты).A Обратная косая черта недопустима в любом другом месте строки за пределами строкового литерала.

Возможно, это не питонический способ, но я обычно использую list с функцией 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