有没有一种工具可以将字符串格式类型自动转换为f字符串?

mar*_*mts 6 python string formatting f-string

从python 3.6开始,将值格式化为字符串的最短,最高效的方法是PEP 498 f字符串(例如f'Hello {name}')。

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

ika*_*men 19

您可以使用flynt将多个 python 文件转换为使用 f 字符串。

要运行它,您需要一个 python 3.6+ 解释器。然后,它就像这样简单:

pip install flynt
flynt [relative or absolute path to the root of your project]
Run Code Online (Sandbox Code Playgroud)

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

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

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

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


Fra*_*uzo 5

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

printf 风格的字符串格式化

可用性:

除非--keep-percent-format通过。

'%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)
Run Code Online (Sandbox Code Playgroud)

f-字符串

可用性:

--py36-plus 在命令行上传递。

'{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}'
Run Code Online (Sandbox Code Playgroud)

注意: pyupgrade 故意胆小,如果它会使表达式变长或者替换参数不是简单的名称或虚线名称(因为这会降低可读性),则不会创建 f 字符串。