Как написать очень длинную строку, которая соответствует PEP8 и предотвращает E501
поскольку PEP8 предлагает придерживаться правила 80 столбцов для вашей программы python, как я могу придерживаться этого с длинными строками, т. е.
s = "this is my really, really, really, really, really, really, really long string that I'd like to shorten."
Как бы я мог расширить это до следующей строки, т. е.
s = "this is my really, really, really, really, really, really" +
"really long string that I'd like to shorten."
8 ответов:
неявная конкатенация может быть самым чистым решением:
s = "this is my really, really, really, really, really, really," \ " really long string that I'd like to shorten."
Edit по размышлении я согласен, что предложение Тодда использовать скобки, а не продолжение строки, лучше по всем причинам, которые он дает. Единственное колебание, которое у меня есть, это то, что относительно легко спутать строки в скобках с кортежами.
кроме того, поскольку соседние строковые константы автоматически объединяются, вы можете закодировать его следующим образом:
s = ("this is my really, really, really, really, really, really, " "really long string that I'd like to shorten.")
обратите внимание, что нет знака плюс, и я добавил дополнительную запятую и пробел, который следует за форматированием вашего примера.
лично мне не нравятся обратные косые черты, и я помню, что где-то читал, что его использование фактически устарело в пользу этой формы, которая более явна. Помните, "явное лучше, чем неявное."
Я считаю обратная косая черта должна быть менее четкой и менее полезной, потому что это фактически избегает символа новой строки. Невозможно поставить комментарий конца строки после него, если это необходимо. Это можно сделать с помощью сцепленных строковых констант:
s = ("this is my really, really, really, really, really, really, " # comments ok "really long string that I'd like to shorten.")
я использовал поиск Google "python line length", который возвращает ссылку PEP8 в качестве первого результата, но также ссылки на другой хороший пост StackOverflow по этой теме:"почему Python PEP-8 должен указывать максимальную строку длину 79 символов?"
еще одна хорошая поисковая фраза будет "продолжение линии python".
Я думаю, что самым важным словом в вашем вопросе было "предлагает".
стандарты кодирования-это забавные вещи. Часто руководство, которое они предоставляют, имеет действительно хорошую основу, когда оно было написано (например, большинство терминалов не могут показывать > 80 символов в строке), но со временем они становятся функционально устаревшими, но все еще жестко придерживаются. Я думаю, что вам нужно сделать здесь, чтобы взвесить относительные достоинства "сломать" это конкретное предложение против удобочитаемости и mainatinability вашего кода.
извините, это не дает прямого ответа на ваш вопрос.
вы потеряли места, и вам, вероятно, нужен символ продолжения строки, т. е. а
\
.s = "this is my really, really, really, really, really, really" + \ " really long string that I'd like to shorten."
или еще:
s = "this is my really, really, really, really, really, really" \ " really long string that I'd like to shorten."
Parens также будет работать вместо продолжения строки, но вы рискуете, что кто-то подумает, что вы намеревались иметь кортеж и просто забыли запятую. Возьмем к примеру:
s = ("this is my really, really, really, really, really, really" " really long string that I'd like to shorten.")
против:
s = ("this is my really, really, really, really, really, really", " really long string that I'd like to shorten.")
с динамической типизацией Python код может работать в любом случае, но давать неправильные результаты с тем, который вы не собирался.
обратная косая черта:
s = "this is my really, really, really, really, really, really" + \ "really long string that I'd like to shorten."
или завернуть в parens:
s = ("this is my really, really, really, really, really, really" + "really long string that I'd like to shorten.")
С
\
вы можете развернуть операторы в несколько строк:s = "this is my really, really, really, really, really, really" + \ "really long string that I'd like to shorten."
должны работать.
Я обычно использую несколько методов, не упомянутых здесь для указания больших строк, но они предназначены для очень конкретных сценариев. МММ...
многострочные капли текста, часто с форматированными маркерами (не совсем то, что вы просили, но все же полезно):
error_message = ''' I generally like to see how my helpful, sometimes multi-line error messages will look against the left border. '''.strip()
растите переменную по частям через любой метод интерполяции строк, который вы предпочитаете:
var = 'This is the start of a very,' var = f'{var} very long string which could' var = f'{var} contain a ridiculous number' var = f'{var} of words.'
читать его из файла. PEP-8 не делает ограничьте длину строк в файле; только строки вашего кода. :)
используйте грубую силу или ваш редактор, чтобы разделить строку на управляемые строки с помощью новых строк, а затем удалить все новые строки. (Аналогично первому методу, который я перечислил):
foo = ''' agreatbigstringthatyoudonotwanttohaveanyne wlinesinbutforsomereasonyouneedtospecifyit verbatimintheactualcodejustlikethis '''.replace('\n', '')
я использовал textwrap.дедент в прошлом. Это немного громоздко, поэтому я предпочитаю линейные продолжения сейчас, но если вы действительно хотите отступ блока, я думаю, что это здорово.
пример кода (где обрезка должна избавиться от первого '\n ' с кусочком):
import textwrap as tw x = """ This is a yet another test. This is only a test""" print(tw.dedent(x[1:]))
объяснение:
из того, что я могу сказать, dedent вычисляет отступ на основе пробела в первой строке текста перед новой строкой. Поэтому я добавил новую строку, чтобы было проще выстраиваться код. Чтобы избежать новой строки, вам придется добавить в первую строку текста дополнительное пустое пространство, чтобы последующие строки уменьшали отступы по вашему желанию. Если вы хотите настроить его, вы можете легко переопределить его с помощью
re
модуль.этот метод имеет ограничения в том, что очень длинные строки все еще будут длиннее, чем вы хотите, и в этом случае другие методы, которые объединяют строки, более подходят.