我刚刚注意到,如果我在 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/