我使用defaultdict()
测试dict.setdefault()
vs timeit
效率。出于某种原因,执行timeit
会返回两个值;
导入defaultdict 来自timeit import timeit
dd = defaultdict(list)
ds = {}
def dset():
for i in xrange(100):
ds.setdefault(i, []).append(i)
def defdict():
for y in xrange(100):
dd[y].append(y)
然后我打印两个函数的执行时间,我得到了4个值;
print timeit('dset()', setup='from def_dict import dset')
print timeit('defdict()', setup='from def_dict import defdict')
22.3247003333
23.1741990197
11.7763511529
12.6160995785
主要陈述的时间编号执行。这将执行一次setup语句,然后返回执行主语句多次所需的时间,以秒为单位测量为浮点数。参数是循环次数,默认值到一百万。要使用的主语句,setup语句和timer函数将传递给构造函数。
我在Python 2.7上。
答案 0 :(得分:1)
当timeit导入setup参数中指示的脚本时,它实际上会导致它再次被调用。当我在python-3中使用你的代码时,它也给了我两个值,但是当它将timeit语句放在另一个脚本中时,它会按原样输出一个值。此外,如果您添加以下行:
if __name__ == "__main__":
就在你的timeit陈述之上,这也将解决问题,并且只会调用一次(每次)。
至于为什么两个值不同,我不得不猜测第二个是原始调用,并且因此在第二个返回并打印后打印,这意味着它具有a)输出到的额外延迟打印缓冲区b)从另一个调用返回的时间。