Python中的多行f字符串

时间:2017-08-30 16:01:00

标签: python string python-3.6

我正在尝试为国内项目编写符合PEP-8的代码(我必须承认这些是我在python世界中的第一步)并且我有一个超过80个字符长的f字符串< / p>

- self.text上点附近的实线是80个字符。 (抱歉没有预览的悲伤链接,但我必须有10+代表发布'em)

我试图用最多的 pythonic 方式将它分成不同的行,但唯一真正有效的aswer是我的linter错误

工作代码:

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

linter认为我不尊重PEP-8中的E122,有没有办法让字符串正确并符合代码?

5 个答案:

答案 0 :(得分:16)

我认为会是

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

答案 1 :(得分:7)

来自Style Guide for Python Code

  

包裹长行的首选方法是使用Python隐含的   括号,方括号和大括号内的行连续。

鉴于此,以下内容将以符合PEP-8的方式解决您的问题。

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

Python字符串在未用逗号分隔时会自动连接,因此您无需显式调用join()

答案 2 :(得分:1)

您可以使用三重单引号或三重双引号,但在字符串的开头放置一个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”。

答案 3 :(得分:1)

您可以混合使用多行引用样式和常规字符串和 f 字符串:

foo = 'bar'
baz = 'bletch'
print(f'foo is {foo}!\n',
      'bar is bar!\n',
      f"baz is {baz}!\n",
      '''bletch
      is
      bletch!''')

打印这个(注意缩进):

foo is bar!
 bar is bar!
 baz is bletch!
 bletch
      is
      bletch!

答案 4 :(得分:0)

如@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