def main():
for i in xrange(10**8):
pass
main()
Python中的这段代码在其中运行(注意:计时是通过Linux中的BASH中的time函数完成的。)>
real 0m1.841s user 0m1.828s sys 0m0.012s
但是,如果在函数中未放置for循环,则>>
for i in xrange(10**8): pass
然后它将运行更长的时间:
real 0m4.543s user 0m4.524s sys 0m0.012s
这是为什么?
def main():对于xrange(10 ** 8)中的i:传递main()Python中的这段代码在其中运行(注意:计时是通过Linux中的BASH中的time函数完成的。)实数0m1。 841s用户0m1 ....
您可能会问为什么
存储局部变量比存储全局变量更快。这是CPython实现的详细信息。在函数内部,字节码为:
2 0 SETUP_LOOP 20 (to 23) 3 LOAD_GLOBAL 0 (xrange) 6 LOAD_CONST 3 (100000000) 9 CALL_FUNCTION 1 12 GET_ITER >> 13 FOR_ITER 6 (to 22) 16 STORE_FAST 0 (i) 3 19 JUMP_ABSOLUTE 13 >> 22 POP_BLOCK >> 23 LOAD_CONST 0 (None) 26 RETURN_VALUE
在最顶层,字节码是:
除了局部/全局变量存储时间外,操作码预测
使功能更快。如其他答案所解释,该函数在循环中使用dis
module操作码。这是函数循环的字节码: