gpt4 book ai didi

python - 为什么 repr(int) 比 str(int) 快?

转载 作者:IT老高 更新时间:2023-10-28 21:51:34 25 4
gpt4 key购买 nike

我想知道为什么 repr(int)str(int) 快。使用以下代码片段:

ROUNDS = 10000

def concat_strings_str():
return ''.join(map(str, range(ROUNDS)))

def concat_strings_repr():
return ''.join(map(repr, range(ROUNDS)))

%timeit concat_strings_str()
%timeit concat_strings_repr()

我得到了这些时间(python 3.5.2,但结果与 2.7.12 非常相似):

 1.9 ms ± 17.9 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
1.38 ms ± 9.07 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

如果我在正确的道路上,the same function long_to_decimal_string is getting called引擎盖下。

我是不是做错了什么或者我错过了什么?


更新:这可能与 int__repr____str__ 方法无关,但与 repr()str(),因为 int.__str__int.__repr__ 实际上相当快:

def concat_strings_str():
return ''.join([one.__str__() for one in range(ROUNDS)])

def concat_strings_repr():
return ''.join([one.__repr__() for one in range(ROUNDS)])

%timeit concat_strings_str()
%timeit concat_strings_repr()

结果:

2.02 ms ± 24.3 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
2.05 ms ± 7.07 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

最佳答案

因为使用 str(obj) 必须首先经过 type.__call__ 然后 str.__new__ (create a new string) 然后 PyObject_Str (make a string out of the object) 调用 int.__str__ 并且,最后,使用你链接的函数。

repr(obj),对应builtin_repr,直接调用PyObject_Repr (get the object repr)int.__repr__再调用与int.__str__功能相同的call_function .

此外,它们通过 CALL_FUNCTION opcode(处理为调用生成的 _PyObject_FastCallKeywords 的函数)所采用的路径略有不同。

来自 GitHub 上的 master 分支(CPython 3.7):

正如您的更新所述,这与 int.__repr__int.__str__ 无关,毕竟它们是相同的功能;这都是关于 reprstr 如何到达他们的。 str 只需要更加努力。

关于python - 为什么 repr(int) 比 str(int) 快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45376719/

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