我如何最好地处理 f-strings 的 pylint 长线检查?
How do I best handle pylint long-line checks with f-strings?
让我先说明一下我喜欢 pylint
和 f 弦的事实。不幸的是,公司政策规定了最大行长度,使用长的 f-strings 不符合该政策。例如:
xyzzy = f'Let us pretend this line (from {first_name} {last_name}) is too long')
我知道,使用 str.format()
,有一个相当简单的方法:
xyzzy = 'Let us pretend this line (from {} {}) is too long'.format(
first_name, last_name)
但是,我真的不想放弃 f-strings 的主要好处,即让数据与周围文本内联的能力,所以我不必去寻找它。
我可以做两个单独的f-string并用+
连接它们,但这似乎有点浪费。
有没有办法做一个 单 f 弦但以停止 pylint
抱怨长度的方式分解?我正在考虑类似于以下(神话般的)方法的方法,它在自动神奇地连接字符串文字时执行 C 的操作:
xyzzy = f'Let us pretend this line (from {first_name} '
f'{last_name}) is too long')
请注意,这与第一行末尾带有 +
的结构 差别不大,但我怀疑后者是两个不同的操作字节码。
我想在你的情况下,最好使用使用反斜杠的常规行继续方法 \
:
xyzzy = f'Let us pretend this line (from {first_name} ' \
f'{last_name}) is too long')
请注意,它生成与单行相同的字节码:
>>> def foo():
... return "long line"
...
>>> def bar():
... return "long " \
... "line"
...
>>> dis.dis(foo)
2 0 LOAD_CONST 1 ('long line')
2 RETURN_VALUE
>>> dis.dis(bar)
2 0 LOAD_CONST 1 ('long line')
2 RETURN_VALUE
也就是说,CPython 编译器在简单优化方面非常聪明:
>>> def foobar():
... return "long " + "line"
...
>>> dis.dis(foobar)
2 0 LOAD_CONST 1 ('long line')
2 RETURN_VALUE
最好的方法是用反斜杠连接 (\
):
xyzzy = f'Let us pretend this line (from {first_name} ' \
f'{last_name}) is too long')
或者使用不推荐的方式:)
xyzzy = ''.join((f'Let us pretend this line (from {first_name} ',
f'{last_name}) is too long'))
我找到了以下三种方法来解决这个问题:
first_name = 'John'
last_name = 'Doe'
foo = f'Let us pretend this line (from {first_name} ' \
f'{last_name}) is too long ' \
f'Let us pretend this line (from {first_name} ' \
f'{last_name}) is too long'
bar = f"""Let us pretend this line (from {first_name}
{last_name}) is too long
Let us pretend this line (from {first_name}
{last_name}) is too long""".replace('\n', ' ')
xyz = (
f'Let us pretend this line (from {first_name} '
f'{last_name}) is too long '
f'Let us pretend this line (from {first_name} '
f'{last_name}) is too long'
)
我个人认为最后一个变体看起来最干净,但如果您想使用 单个 f-string,请参阅第二个选项。更多想法可以在 similar question.
找到
您可以用括号将字符串括起来,并使用 python 的隐式字符串连接:
xyzzy = (
f'Let us pretend this line (from {first_name} '
f'{last_name}) is too long).'
' This is a non f-string part of the string'
)
Black 可以半自动执行此操作,您只需在字符串中的第 87 个字符后添加一个 'f'
并应用自动格式化(或在您第一次应用后添加 "f"
) .
让我先说明一下我喜欢 pylint
和 f 弦的事实。不幸的是,公司政策规定了最大行长度,使用长的 f-strings 不符合该政策。例如:
xyzzy = f'Let us pretend this line (from {first_name} {last_name}) is too long')
我知道,使用 str.format()
,有一个相当简单的方法:
xyzzy = 'Let us pretend this line (from {} {}) is too long'.format(
first_name, last_name)
但是,我真的不想放弃 f-strings 的主要好处,即让数据与周围文本内联的能力,所以我不必去寻找它。
我可以做两个单独的f-string并用+
连接它们,但这似乎有点浪费。
有没有办法做一个 单 f 弦但以停止 pylint
抱怨长度的方式分解?我正在考虑类似于以下(神话般的)方法的方法,它在自动神奇地连接字符串文字时执行 C 的操作:
xyzzy = f'Let us pretend this line (from {first_name} '
f'{last_name}) is too long')
请注意,这与第一行末尾带有 +
的结构 差别不大,但我怀疑后者是两个不同的操作字节码。
我想在你的情况下,最好使用使用反斜杠的常规行继续方法 \
:
xyzzy = f'Let us pretend this line (from {first_name} ' \
f'{last_name}) is too long')
请注意,它生成与单行相同的字节码:
>>> def foo():
... return "long line"
...
>>> def bar():
... return "long " \
... "line"
...
>>> dis.dis(foo)
2 0 LOAD_CONST 1 ('long line')
2 RETURN_VALUE
>>> dis.dis(bar)
2 0 LOAD_CONST 1 ('long line')
2 RETURN_VALUE
也就是说,CPython 编译器在简单优化方面非常聪明:
>>> def foobar():
... return "long " + "line"
...
>>> dis.dis(foobar)
2 0 LOAD_CONST 1 ('long line')
2 RETURN_VALUE
最好的方法是用反斜杠连接 (\
):
xyzzy = f'Let us pretend this line (from {first_name} ' \
f'{last_name}) is too long')
或者使用不推荐的方式:)
xyzzy = ''.join((f'Let us pretend this line (from {first_name} ',
f'{last_name}) is too long'))
我找到了以下三种方法来解决这个问题:
first_name = 'John'
last_name = 'Doe'
foo = f'Let us pretend this line (from {first_name} ' \
f'{last_name}) is too long ' \
f'Let us pretend this line (from {first_name} ' \
f'{last_name}) is too long'
bar = f"""Let us pretend this line (from {first_name}
{last_name}) is too long
Let us pretend this line (from {first_name}
{last_name}) is too long""".replace('\n', ' ')
xyz = (
f'Let us pretend this line (from {first_name} '
f'{last_name}) is too long '
f'Let us pretend this line (from {first_name} '
f'{last_name}) is too long'
)
我个人认为最后一个变体看起来最干净,但如果您想使用 单个 f-string,请参阅第二个选项。更多想法可以在 similar question.
找到您可以用括号将字符串括起来,并使用 python 的隐式字符串连接:
xyzzy = (
f'Let us pretend this line (from {first_name} '
f'{last_name}) is too long).'
' This is a non f-string part of the string'
)
Black 可以半自动执行此操作,您只需在字符串中的第 87 个字符后添加一个 'f'
并应用自动格式化(或在您第一次应用后添加 "f"
) .