gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 20:57:01 28 4
gpt4 key购买 nike

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

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com