Многострочная f-строка в Python
Я пытаюсь написать PEP-8-совместимый код для внутреннего проекта (я должен признать, что это мои первые шаги в мире Python), и у меня есть f-строка длиной более 80 символов
- сплошная тонкая линия рядом с точкой в self.text - это отметка в 80 символов. (Извините за грустную ссылку без предварительного просмотра, но я должен иметь 10+ репутацию, чтобы опубликовать их)
Я пытаюсь разбить его на разные строки самым питонным способом, но единственный ответ, который на самом деле работает, это ошибка для моего линтера
Рабочий код:
def __str__(self):
return f'{self.date} - {self.time},\nTags:' + \
f' {self.tags},\nText: {self.text}'
Выход:
2017-08-30 - 17:58:08.307055,
Tags: test tag,
Text: test text
Линтер думает, что я не уважаю E122 из PEP-8, есть ли способ сделать строку правильной и совместимой с кодом?
Ответы
Ответ 1
Из руководства по стилю для кода Python:
Предпочтительным способом переноса длинных строк является использование подразумеваемого продолжения строки в Python внутри скобок, скобок и скобок.
Учитывая это, следующее решит вашу проблему в соответствии с PEP-8.
return (
f'{self.date} - {self.time}\n'
f'Tags: {self.tags}\n'
f'Text: {self.text}'
)
Строки Python будут автоматически объединяться, если они не разделены запятой, поэтому вам не нужно явно вызывать join()
.
Ответ 2
Я думаю, что это будет
return f'''{self.date} - {self.time},
Tags: {self.tags},
Text: {self.text}'''
Ответ 3
Как уже упоминалось @noddy, этот подход также работает для выражения присваивания переменной:
var1 = "foo"
var2 = "bar"
concat_var = (f"First var is: {var1}"
f" and in same line Second var is: {var2}")
print(concat_var)
должен дать вам:
First var is: foo and in same line Second var is: bar
Ответ 4
Вы можете использовать тройные одинарные кавычки или тройные двойные кавычки, но в начале строки ставьте f:
Тройные одинарные кавычки
return f'''{self.date} - {self.time},
Tags:' {self.tags},
Text: {self.text}'''
Тройные двойные кавычки
return f"""{self.date} - {self.time},
Tags:' {self.tags},
Text: {self.text}"""
Обратите внимание, что вам не нужно использовать "\n", потому что вы используете многострочную строку.