我面对自己使用了很多这种结构:
for node in range(int(self.num_nodes)):
dists[str(node)] = -1
所以,我的问题是:例如,当调用str()
或int()
时,python(3+)使用了什么?它只是演员?它转换? (别的什么?)
你怎么建议我写这种代码?请注意,dists的键必须是str
,而num_nodes
也是str
。
答案 0 :(得分:3)
str
和int
的费用完全取决于您传递给它们的对象。最终,他们只是调用对象的__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!'