Python中的多行f字符串


86

我正在尝试为一个国内项目编写符合PEP-8的代码(我必须承认那是我在python世界中的第一步),而且我的f字符串长度超过80个字符

-self.text点附近的实线是80个字符。(对不起没有预览的可悲链接,但我必须有10个以上的代表才能发布它们)

我试图把它分成不同的线路在最Python的方式,但唯一的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

短绒棉匠认为我不尊重PEP-8的E122,有没有办法使字符串正确并符合代码?


1
或者只是告诉您的助手以增加行字符限制,或者一起忽略该规则
Joran Beasley

21
我不觉得这很愚蠢f
Ma0

3
@JoshLee“ E122连续行缺少缩进或主要缩进”也为什么您要关闭问题?没有重复项,它是关于多行f弦的唯一重复项
-Owlzy

2
@Owlzy答案是否完全相同:使用括号而不是行继续标记?
尼克T

8
这个问题永远都不应该作为一个骗子来解决,因为链接的“ dupe”不是这个问题的骗子。您知道Stackoverflow高级用户会遇到这样的问题:过分激进,请重新打开它。尽快进行重新公开投票。
Urda

Answers:


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}'''

既然它已经关闭,我可以删除这个答案,如果人们认为我应该...的话,但是它并没有包含在重复答案中:/ \
Joran Beasley

8
但是这种多行破坏了f字符串和缩进的目的,我也不觉得这是对三重引号字符串的正确使用,感觉像是在砍
Owlzy

2
虽然此答案确实重复了OP的意图,但我觉得@noddy的答案更好。这个答案恰好是正确的,因为OP也希望在输出中使用多行。如果您希望输出与源代码具有不同的布局,则不能使用三引号。
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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.