我看到很多人使用这样的格式字符串:
root = "sample"
output = "output"
path = "{}/{}".format(root, output)
而不是像这样简单地连接字符串:
path = root + '/' + output
格式字符串是否具有更好的性能,或者这只是为了美观?
原文由 wjk2a1 发布,翻译遵循 CC BY-SA 4.0 许可协议
我同意格式化主要用于提高可读性,但自从 3.6 中的 f-strings 发布以来,表格在性能方面发生了变化。我还认为 f 字符串更具可读性/可维护性,因为 1) 它们可以像大多数常规文本一样从左到右阅读,以及 2) 由于变量在字符串中,因此避免了连接的与间距相关的缺点。
运行这段代码:
from timeit import timeit
runs = 1000000
def print_results(time, start_string):
print(f'{start_string}\n'
f'Total: {time:.4f}s\n'
f'Avg: {(time/runs)*1000000000:.4f}ns\n')
t1 = timeit('"%s, %s" % (greeting, loc)',
setup='greeting="hello";loc="world"',
number=runs)
t2 = timeit('f"{greeting}, {loc}"',
setup='greeting="hello";loc="world"',
number=runs)
t3 = timeit('greeting + ", " + loc',
setup='greeting="hello";loc="world"',
number=runs)
t4 = timeit('"{}, {}".format(greeting, loc)',
setup='greeting="hello";loc="world"',
number=runs)
print_results(t1, '% replacement')
print_results(t2, 'f strings')
print_results(t3, 'concatenation')
print_results(t4, '.format method')
在我的机器上产生这个结果:
% replacement
Total: 0.3044s
Avg: 304.3638ns
f strings
Total: 0.0991s
Avg: 99.0777ns
concatenation
Total: 0.1252s
Avg: 125.2442ns
.format method
Total: 0.3483s
Avg: 348.2690ns
原文由 Eric Ed Lohmar 发布,翻译遵循 CC BY-SA 3.0 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
2 回答893 阅读✓ 已解决
1 回答1.8k 阅读✓ 已解决
这只是为了看起来。一看就知道是什么格式。我们中的许多人更喜欢可读性而不是微优化。
让我们看看 IPython 的
%timeit
是怎么说的: