全局查找与本地查找:ipython笔记本没有性能差异?

时间:2014-09-16 13:43:30

标签: python python-2.7 scope global-variables ipython-notebook

所以我正在阅读这个question,其中OP显示了功能范围和全局范围之间的显着性能差异(~2x差异)。我很兴奋并尝试以两种方式重现OP的结果。

1。 python脚本+终端的time命令

功能

def main():
    for i in xrange(10**8):
        pass
main()

real    0m2.040s
user    0m2.028s
sys 0m0.011s

全局

for i in xrange(10**8):
    pass

real    0m4.710s
user    0m4.699s
sys 0m0.010s

第二个版本慢两倍,这是预期的。

2。 ipython笔记本

功能:

%%timeit
def main():
    for i in xrange(10**8):
        pass
main()
1 loops, best of 3: 2.15 s per loop

全局:

%%timeit
for i in xrange(10**8):
    pass
1 loops, best of 3: 2.14 s per loop

这两个版本现在表现出相同的性能!发生了什么事?

1 个答案:

答案 0 :(得分:0)

timeit本地命名空间中运行所有测试。您的情况唯一的区别是您添加了一个函数调用,但两个版本都使用本地名称运行。

请参阅timeit模块来源中的inner function template; %(stmt)s是经过反复测试以获得每次执行的平均时间的代码。