Багаторядковий f-рядок у Python


86

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

- суцільна тонка лінія біля крапки на self.text - це позначка 80. (Вибачте за сумне посилання без попереднього перегляду, але я повинен мати більше 10 представників, щоб опублікувати їх)

Я намагаюся розділити його на різні рядки найбільш пітонічним способом, але єдиний aswer, який насправді працює, - це помилка для мого лінтера

Робочий кодекс:

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
або просто скажіть своїй ідеї збільшити ліміт символів рядка, або ігноруйте це правило разом
Джоран Бізлі

21
Я не відчуваю, що це дурень .. fструни там не обговорюються.
Ma0

3
@JoshLee "У рядку продовження E122 відсутній відступ або перехресне основне", також чому ви закрили питання? Дублікатів немає, це єдина про багаторядкові f-струни
Owlzy

2
@Owlzy Чи не відповідь точно така сама: використовуйте дужки, а не маркер продовження рядка?
Nick T

8
Це питання ніколи не повинно було закриватися як оману, оскільки пов’язане “обман” не є оманливим у цьому питанні. Користувачі енергії Stackoverflow, про яких ви знаєте, у нас виникла проблема із занадто агресивним ставленням , щоб його знову відкрити. Якнайшвидше повторне голосування.
Урда

Відповіді:


97

З керівництва стилем для коду Python :

Найкращий спосіб перенесення довгих рядків - використання передбачуваного продовження рядка Python усередині дужок, дужок та фігурних дужок.

Враховуючи це, наступне допоможе вирішити вашу проблему відповідно до PEP-8.

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

Рядки Python автоматично об'єднуються, якщо їх не розділяти комою, тому вам не потрібно явно викликати join().


40

Я думаю, це було б

return f'''{self.date} - {self.time},
Tags: {self.tags},
Text: {self.text}'''

тепер, коли його закрито, я можу видалити цю відповідь, якщо люди вважають, що я повинен ... але це не висвітлено у відповіді на обман: / \
Джоран Бізлі

8
але цей різновид багаторядкових перемагає мету f-рядків та відступів. Також я не вважаю, що це правильне використання рядків із потрійними лапками, відчуває себе як хак
Owlzy

2
Хоча ця відповідь і повторює намір OP, я відчуваю, що відповідь @ noddy краща. Ця відповідь якраз виявляється правильною, оскільки ОР також хотів багаторядковий у вихідних даних. Якщо ви хотіли, щоб вихідні дані мали інший макет, ніж вихідний код, потрійні лапки - це не шлях.
Mike Williamson

10

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


8

Як згадував @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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.