Я пытаюсь написать PEP-8-совместимый код для внутреннего проекта (я должен признать, что это мои первые шаги в мире Python), и у меня есть f-строка длиной более 80 символов

- сплошная тонкая линия рядом с точкой в self.text - это отметка в 80 символов. (Извините за грустную ссылку без предварительного просмотра, но я должен иметь 10+ повторений, чтобы опубликовать их)

Я пытаюсь разбить его на разные строки наиболее python , но единственный ответ, который на самом деле работает, это ошибка для моего линтера

Рабочий код:

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, есть ли способ сделать строку правильной и совместимой с кодом?

62
Owlzy 30 Авг 2017 в 19:00

4 ответа

Лучший ответ

Из руководства по стилю для кода Python:

Предпочтительный способ переноса длинных строк - использование подразумеваемого продолжения строки в Python внутри скобок, скобок и скобок.

Учитывая это, следующее решит вашу проблему в соответствии с PEP-8.

return (
    f'{self.date} - {self.time}\n'
    f'Tags: {self.tags}\n'
    f'Text: {self.text}'
)

Строки Python будут автоматически объединяться, если они не разделены запятой, поэтому вам не нужно явно вызывать join().

42
noddy 1 Мар 2019 в 18:59

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

2
lmiguelvargasf 25 Сен 2019 в 02:41

Как уже упоминалось @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
1
codarrior 18 Июл 2019 в 05:14

Я думаю, что это будет

return f'''{self.date} - {self.time},
Tags: {self.tags},
Text: {self.text}'''
24
Joran Beasley 30 Авг 2017 в 16:07