【发布时间】:2016-11-17 13:40:19
【问题描述】:
所以这是一个 CPython 的东西,不太确定它与其他实现有相同的行为。
但是'{0}'.format() 比str() 和'{}'.format() 快。我发布了 Python 3.5.2 的结果,但是,我用 Python 2.7.12 进行了尝试,趋势是一样的。
%timeit q=['{0}'.format(i) for i in range(100, 100000, 100)]
%timeit q=[str(i) for i in range(100, 100000, 100)]
%timeit q=['{}'.format(i) for i in range(100, 100000, 100)]
1000 loops, best of 3: 231 µs per loop
1000 loops, best of 3: 298 µs per loop
1000 loops, best of 3: 434 µs per loop
来自docsobject.__str__(self)
由
str(object)和内置函数format()和print()调用,以计算对象的“非正式”或可良好打印的字符串表示。
那么,str() 和 format() 调用相同的 object.__str__(self) 方法,但是速度上的差异从何而来?
更新
正如@StefanPochmann 和@Leon 在 cmets 中指出的那样,他们得到了不同的结果。我尝试用python -m timeit "..." 运行它,他们是对的,因为结果是:
$ python3 -m timeit "['{0}'.format(i) for i in range(100, 100000, 100)]"
1000 loops, best of 3: 441 usec per loop
$ python3 -m timeit "[str(i) for i in range(100, 100000, 100)]"
1000 loops, best of 3: 297 usec per loop
$ python3 -m timeit "['{}'.format(i) for i in range(100, 100000, 100)]"
1000 loops, best of 3: 420 usec per loop
看来,IPython 正在做一些奇怪的事情……
新问题:通过速度将对象转换为str 的首选方法是什么?
【问题讨论】:
-
为了更快,您也可以尝试直接使用
i.__str__()。虽然str确实是正确的方法。对你来说还不够快吗?