Performance Python3.x中的百分比格式化速度是f字符串的两倍

Performance Python3.x中的百分比格式化速度是f字符串的两倍,performance,cpython,f-string,Performance,Cpython,F String,在评估现有代码是否应切换到str.format/f-strings时,我发现旧式百分比格式的性能大约是前者的两倍 虽然我意识到这种差异在很多情况下可能并不重要,但在一些较小的性能差异上,可读性的论点总是可以提出的。 有时差异可能会产生影响——将大量数据转储到一个文件中,例如 该测试是否公平地衡量了CPython中格式化方法之间的性能差异 简单计时脚本: 导入时间 重复次数=1_000_000 a、 b,c,d,e,f,g,h=[str(a)表示范围(8)内的a] 打印(“百分比格式:'%s'))

在评估现有代码是否应切换到
str.format
/
f-strings
时,我发现旧式百分比格式的性能大约是前者的两倍

虽然我意识到这种差异在很多情况下可能并不重要,但在一些较小的性能差异上,可读性的论点总是可以提出的。 有时差异可能会产生影响——将大量数据转储到一个文件中,例如

该测试是否公平地衡量了CPython中格式化方法之间的性能差异

简单计时脚本:

导入时间
重复次数=1_000_000
a、 b,c,d,e,f,g,h=[str(a)表示范围(8)内的a]
打印(“百分比格式:'%s'))
t=time.process\u time()
对于范围内的i(重复次数):
n=(
%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s
(a,b,c,d,e,f,g,h,a,b,c,d,e,f,g,h)
)
打印(time.process\u time()-t,“\n”)
打印(“'str.format'格式:'%s'))
t=time.process\u time()
对于范围内的i(重复次数):
n=“{:s}{:s}{:s}{:s}{:s}{:s}{:s}{:s}{:s}{:s}{:s}{:s}{:s}{:s}{:s}{:s}{:s}{:s}{:s}{:s}”格式(
a、 b,c,d,e,f,g,h,a,b,c,d,e,f,g,h,
)
打印(time.process\u time()-t,“\n”)
打印(“'f-string'格式:'%s'))
t=time.process\u time()
对于范围内的i(重复次数):
n=f{a:s}{b:s}{c:s}{d:s}{e:s}{f:s}{g:s}{h:s}{a:s}{b:s}{c:s}{d:s}{e:s}{f:s}{g:s}{h:s}”
打印(time.process\u time()-t,“\n”)
对于Python3.8和3.9b3,我得到了类似的时间,例如输出

Percentage formatting: '%s'
1.163297844

String __format__ formatting: '.format()'
1.9792420380000002

F-String formatting: f'...'
2.3670744659999996