Как я могу разбить эту длинную строку в Python?

Также возможно, что в файле persistence.xml использовался EmbeddedDriver, в то время как URL-адрес jdbc указывал на сервер Derby. В этом случае просто измените url на указание пути к базе данных.

147
задан Gattster 13 January 2010 в 18:01
поделиться

3 ответа

Это начало. Неплохая практика - определять свои длинные строки вне кода, который их использует. Это способ разделить данные и поведение. Ваш первый вариант - неявно соединить строковые литералы, сделав их соседними:

("This is the first line of my text, "
"which will be joined to a second.")

или с окончаниями строк, что немного хрупче, так как это работает:

"This is the first line of my text, " \
"which will be joined to a second."

Но это не:

"This is the first line of my text, " \ 
"which will be joined to a second."

Видите разницу? Нет? Ну, и вы не увидите, когда это будет ваш код.

Недостатком неявного соединения является то, что оно работает только со строковыми литералами, а не со строками, взятыми из переменные, так что вещи могут стать немного более волосатыми, когда вы рефактор. Кроме того, вы можете интерполировать форматирование только на объединенной строке в целом.

Альтернативно, вы можете объединиться явно, используя оператор конкатенация (+):

("This is the first line of my text, " + 
"which will be joined to a second.")

Явное лучше, чем неявное, как говорит дзен питона, но это создаёт три строки вместо одной и использует вдвое больше памяти: есть две, которые вы записали, плюс одна, которая состоит из двух, соединённых вместе, так что вы должны знать, когда игнорировать дзен. Положительная сторона заключается в том, что вы можете применить форматирование к любой из подстроек отдельно на каждой строке, или на всю партию за пределами скобок.

Наконец, вы можете использовать строки в тройных кавычках:

"""This is the first line of my text
which will be joined to a second."""

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

"""This is the first line of my text \
which will be joined to a second."""

В этом есть та же проблема, что и при использовании той же техники, описанной выше, в том, что корректный код отличается от некорректного только невидимыми пробелами.

Какой из них "лучший" зависит от вашей конкретной ситуации, но ответ не просто эстетический, а один из тонко отличающихся друг от друга поведений.

308
ответ дан 23 November 2019 в 21:34
поделиться

Лично я не люблю повесить открытые блоки, поэтому я отформатирую его как:

logger.info(
    'Skipping {0} because its thumbnail was already in our system as {1}.'
    .format(line[indexes['url']], video.title)
)

В целом я бы не стал беспокоиться слишком сложно, чтобы код соответствовать точно в пределах 80 столбцов. Стоит держать длину линии до разумных уровней, но жесткий 80 предел - это вещь прошлого.

11
ответ дан 23 November 2019 в 21:34
поделиться

К последовательным строковым литералам присоединяется компилятор, и заключенные в скобки выражения считаются одной строкой кода:

logger.info("Skipping {0} because it's thumbnail was "
  "already in our system as {1}.".format(line[indexes['url']],
  video.title))
39
ответ дан 23 November 2019 в 21:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: