使用变量构造长Python字符串
我有一个python字符串,它基本上是由3个变量串联而成的。我正在使用f字符串使它成为一个字符串。现在看起来是这样的:使用变量构造长Python字符串,python,python-3.x,string,string-formatting,f-string,Python,Python 3.x,String,String Formatting,F String,我有一个python字符串,它基本上是由3个变量串联而成的。我正在使用f字符串使它成为一个字符串。现在看起来是这样的: my_string = f'{getattr(RequestMethodVerbMapping, self.request_method).value} {self.serializer.Meta.model.__name__} {self.request_data['name']}' 这给了我输出: Create IPGroup test-create-demo-098
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字符串将该行拆分,如下所示:
my_string = f'''{getattr(RequestMethodVerbMapping, self.request_method).value}
{self.serializer.Meta.model.__name__} {self.request_data['name']}'''
派林现在很高兴,但我的字符串如下所示:
Create
IPGroup test-create-demo-098
这样做的最佳方法是什么,这样我就可以将字符串放在一行中,并且对于长度超过120个字符的行,也可以使Pylint静音?这本身就是一条长行,我不会试图将很多内容放在一行中,而是将其分解并应用重构方法以提高可读性:
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}'
我认为以下几点智慧非常适合我们的问题:
稀疏比密集好
可读性很重要
这本身就是一条很长的线,我不想把很多东西放在一行中,而是将其分解并应用重构方法以提高可读性:
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}'
我认为以下几点智慧非常适合我们的问题:
稀疏比密集好
可读性很重要
可以像普通字符串一样,在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
可以像普通字符串一样,在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