在python中str()和int()是否耗时?

时间:2016-07-07 21:17:01

标签: python performance

我面对自己使用了很多这种结构:

for node in range(int(self.num_nodes)):
    dists[str(node)] = -1

所以,我的问题是:例如,当调用str()int()时,python(3+)使用了什么?它只是演员?它转换? (别的什么?)

你怎么建议我写这种代码?请注意,dists的键必须是str,而num_nodes也是str

1 个答案:

答案 0 :(得分:3)

strint的费用完全取决于您传递给它们的对象。最终,他们只是调用对象的__str____int__钩子方法。对于大多数简单对象,这些操作应该非常快。例如将一个简单的字符串转换为整数使我的计算机大约0.5微秒:

$python -mtimeit -s 'x="1"' 'int(x)'
1000000 loops, best of 3: 0.479 usec per loop

并且反向操作只需要一点点.1微秒:

$ python -mtimeit -s 'x=1' 'str(x)'
10000000 loops, best of 3: 0.12 usec per loop

然而,创建病理对象非常容易,而这些病理对象实际上非常昂贵。

import time
class Argv(object):
    def __str__(self):
        time.sleep(1000)
        return 'ha ha ha!'