Многострочная 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", потому что вы используете многострочную строку.