使用变量构造一个长 Python 字符串
Constructing a long Python string using variables
我有一个 python 字符串,它基本上是 3 variables.I 的串联,我正在使用 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 静音?
这本身就是一长行,我不会尝试将很多内容放入一行,而是将其分解并应用 "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 的以下智慧很适合我们这里的问题:
Sparse is better than dense.
Readability counts.
可以像普通字符串一样,在中间仅使用空格来连接 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
我有一个 python 字符串,它基本上是 3 variables.I 的串联,我正在使用 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 静音?
这本身就是一长行,我不会尝试将很多内容放入一行,而是将其分解并应用 "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 的以下智慧很适合我们这里的问题:
Sparse is better than dense.
Readability counts.
可以像普通字符串一样,在中间仅使用空格来连接 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