python - 使用打印时,与 "+"连接是否比与 ","分隔更有效?

标签 python performance python-3.x

我刚刚注意到,如果我在 print() 函数中使用 + 进行连接并在 shell 中运行代码,文本会更快地出现。然而,当使用 , 时,文本看起来要慢得多,就像“正在输入”的动画效果一样。

这两者有效率差异吗?

最佳答案

虽然我不会怀疑它们之间存在很大差异,但它们显然略有不同。

连接文字字符串的 print 调用可能会在打印之前由 CPython 的窥视孔优化器连接,从而加快执行速度,这可能就是您所看到的。除此之外,对于小字符串,仅传递一个参数并因此不使用 sep 这一事实也是一个小好处。

对于较大的字符串,需要创建一个大的临时字符串来保存它们的连接,这抵消了所有速度差异。 (由于大小和它们的连接,没有使用 sep 并且只传递一个参数这一事实胜过)

在打印调用中使用 , 会将每个字符串作为参数传递,并使用默认的 sep 将其分开。虽然这显然需要更多的工作,但当涉及到大字符串时,它会再次消失。

因此,对于实际上被优化器捕获的小字符串,连接会更快一些:

%timeit print("a" + "b", file=f)
1000000 loops, best of 3: 1.76 µs per loop

%timeit print("a", "b", sep='', file=f)
100000 loops, best of 3: 2.48 µs per loop

即使优化器无法加入他们:

a = "a"; b = "b"

%timeit print(a + b, file=f)
1000000 loops, best of 3: 2 µs per loop

%timeit print(a, b, sep='', file=f)
100000 loops, best of 3: 2.45 µs per loop

当字符串大小增加时,这个微小的差异就会黯然失色:

s1, s2 = "s" * 100000, "s"*100000
%timeit print(s1 + s2, file=f)
1000 loops, best of 3: 374 µs per loop
%timeit print(s1, s2, sep='', file=f)
1000 loops, best of 3: 373 µs per loop

关于python - 使用打印时,与 "+"连接是否比与 ","分隔更有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45215219/

相关文章:

python - 查询具有列表值的 Pandas 数据框列

python - 如何将行字符串值转换为特征

python - Celery:如何忽略和弦或链中的任务结果?

python - 使用单词列表的正则表达式

python - Pyinstaller:导入错误:DLL加载失败:找不到指定的模块

c++ - 为什么用 int 替换 long long 会提高性能?

c# - 关于 32 位 .exe 与 64 位 .exe

python - 我的显示模块不显示(Python 2.7)

javascript - 显示多个元素时性能不佳

python - Tkinter 模块 - 任务栏未显示