Python 中的多行 f 字符串
- 2025-04-15 09:20:00
- admin 原创
- 61
问题描述:
我正在尝试为国内项目编写符合 PEP-8 的代码,并且有一行 f 字符串的长度超过 80 个字符:
def __str__(self):
return f'{self.data} - {self.time},
Tags: {self.tags},
Text: {self.text}'
我试图以最Pythonic 的方式将其拆分成不同的行,但唯一真正有效的答案是我的 linter 出现错误。
工作代码:
def __str__(self):
return f'{self.date} - {self.time},
Tags:' + \n f' {self.tags},
Text: {self.text}'
输出:
2017-08-30 - 17:58:08.307055,
Tags: test tag,
Text: test text
linter 认为我没有遵守PEP-8中的E122,有没有办法让字符串正确并且代码兼容?
解决方案 1:
来自Python 代码样式指南:
换行的首选方式是使用 Python 在括号、方括号和大括号内的隐含行延续。
鉴于此,以下内容将以符合 PEP-8 的方式解决您的问题。
return (
f'{self.date} - {self.time}
'
f'Tags: {self.tags}
'
f'Text: {self.text}'
)
当不使用逗号分隔时,Python 字符串将自动连接,因此您不需要显式调用join()
。
解决方案 2:
我认为会是
return f'''{self.date} - {self.time},
Tags: {self.tags},
Text: {self.text}'''
解决方案 3:
您可以使用三个单引号或三个双引号,但在字符串的开头放置一个 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”,因为您使用的是多行字符串。
解决方案 4:
正如@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
解决方案 5:
您可以混合使用多行引用样式和常规字符串和f 字符串:
foo = 'bar'
baz = 'bletch'
print(f'foo is {foo}!
',
'bar is bar!
',
f"baz is {baz}!
",
"not f-string version: baz is {baz}!
",
'''bletch
is
bletch!''')
打印此内容(注意缩进):
foo is bar!
bar is bar!
baz is bletch!
not f-string version: baz is {baz}!
bletch
is
bletch!
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD