是否有自动将字符串格式类型转换为 f 字符串的工具?

Is there a tool to automatically convert string formatting types to f-strings?

自 python 3.6 起,将值格式化为字符串的最短且性能最高的方法是 PEP 498 f-strings(例如 f'Hello {name}')。

在现有代码库中将旧格式类型('Hello %s' % name'Hello {}'.format(name))转换为新格式似乎是一项可以自动化的任务,但是我找不到任何工具来执行此操作.是否有工具可以自动将使用旧字符串格式的文字转换为 f 字符串?

您可以使用 flynt 将多个 python 文件转换为使用 f-strings。

要运行它,你需要一个python 3.6+的解释器。然后,就这么简单:

pip install flynt
flynt [relative or absolute path to the root of your project]

请记住,它会就地更改文件,因此建议将这些文件提交到 git 或您喜欢的 SVC 系统。

这是一篇描述f-strings优缺点的文章:

https://medium.com/@ikamen/f-strings-make-your-python-code-faster-and-more-readable-today-579ef9ca0313

免责声明:我是 flynt 包的作者。

看起来 pyupgrade 既可以将 % 格式转换为 format 调用,又可以将 format 调用转换为 f-strings

printf-style string formatting

Availability:

Unless --keep-percent-format is passed.

'%s %s' % (a, b)                  # '{} {}'.format(a, b)
'%r %2f' % (a, b)                 # '{!r} {:2f}'.format(a, b)
'%(a)s %(b)s' % {'a': 1, 'b': 2}  # '{a} {b}'.format(a=1, b=2)

f-strings

Availability:

--py36-plus is passed on the commandline.

'{foo} {bar}'.format(foo=foo, bar=bar)  # f'{foo} {bar}'
'{} {}'.format(foo, bar)                # f'{foo} {bar}'
'{} {}'.format(foo.bar, baz.womp}       # f'{foo.bar} {baz.womp}'

注意:pyupgrade 是故意胆怯的,如果它会使表达式更长或者如果替换参数不是简单名称或带点的名称(因为这会降低可读性),则不会创建 f-string。