我有一个python字符串,它基本上是3个变量的串联。我正在使用f-strings
使其成为字符串。现在看起来像这样:
my_string = f'{getattr(RequestMethodVerbMapping, self.request_method).value} {self.serializer.Meta.model.__name__} {self.request_data['name']}'
这给了我输出:
Create IPGroup test-create-demo-098
正是我想要的输出。但是,很明显,该行太长了,现在Pylint开始抱怨,所以我尝试使用多行f-strings
来分行,如下所示:
my_string = f'''{getattr(RequestMethodVerbMapping, self.request_method).value}
{self.serializer.Meta.model.__name__} {self.request_data['name']}'''
Pylint现在很高兴,但是我的字符串如下:
Create
IPGroup test-create-demo-098
执行此操作的最佳方法是什么,这样我就可以将字符串放在一行中,并且使行长超过120个字符的Pylint保持静音?
答案 0 :(得分:7)
这是一条很长的线,因此,我将其分解并应用"Extract Variable"重构方法以提高可读性:
request_method_name = getattr(RequestMethodVerbMapping, self.request_method).value
model_name = self.serializer.Meta.model.__name__
name = self.request_data['name']
my_string = f'{request_method_name} {model_name} {name}'
我认为Zen of Python的以下几点智慧很适合我们的问题:
稀疏比稠密好。
可读性计数。
答案 1 :(得分:4)
有可能像普通字符串一样,在f字符串之间仅包含空格。只需将整个内容括起来即可。
my_string = (f'{getattr(RequestMethodVerbMapping, self.request_method).value}'
f' {self.serializer.Meta.model.__name__}
f' {self.request_data["name"]}')
它将编译为与单行字符串完全相同的代码。
甚至可以交织f字符串和非f字符串:
>>> print(f"'foo'" '"{bar}"' f'{1 + 42}')
'foo'"{bar}"43