Как я могу разбить эту длинную линию в Python?
Как вы собираетесь форматировать длинную строку, такую как эта? Я хотел бы получить его не более 80 символов в ширину:
logger.info("Skipping {0} because its thumbnail was already in our system as {1}.".format(line[indexes['url']], video.title))
Это мой лучший вариант?
url = "Skipping {0} because its thumbnail was already in our system as {1}."
logger.info(url.format(line[indexes['url']], video.title))
4 ответов:
это только начало. Это не плохая практика, чтобы определить ваши более длинные строки за пределами кода, который их использует. Это способ разделить данные и поведение. Ваш первый вариант-неявно объединить строковые литералы, сделав их смежными друг с другом:
("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."""это имеет ту же проблему, что и тот же метод выше, в том, что правильный код отличается только от неправильного кода невидимыми пробелами.
какой из них" лучший " зависит от вашей конкретной ситуации, но ответ не просто эстетический, а один из тонко различных поведений.
последовательные строковые литералы соединяются компилятором, а заключенные в скобки выражения считаются одной строкой кода:
logger.info("Skipping {0} because it's thumbnail was " "already in our system as {1}.".format(line[indexes['url']], video.title))
лично мне не нравится висеть открытыми блоками, поэтому я бы отформатировал его как:
logger.info( 'Skipping {0} because its thumbnail was already in our system as {1}.' .format(line[indexes['url']], video.title) )В общем, я бы не стал слишком сильно бороться, чтобы код точно вписывался в строку с 80 столбцами. Стоит сохранить длину линии до разумных уровней, но жесткий предел 80-это в прошлом.
вы можете использовать модуль textwrap, чтобы разбить его на несколько строк
import textwrap str="ABCDEFGHIJKLIMNO" print("\n".join(textwrap.wrap(str,8)))ABCDEFGH
ИЙКЛИМНОС документация:
textwrap.обертывание(текст[, длина[, ...]])
Обертывает один абзац в текст (строку), поэтому каждая строка имеет длину не более ширины символов. Возвращает список выводимых строк, без итоговой строки.дополнительные параметры сайта соответствуют атрибутам экземпляра
TextWrapper, описаны ниже. ширина по умолчанию70.посмотреть
TextWrapper.wrap()метод для получения дополнительной информации о том, как wrap() ведет себя.
Comments