为什么Python代码在函数中运行得更快?

问题描述 投票:828回答:3
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 ....

python performance profiling benchmarking cpython
3个回答
527
投票

您可能会问为什么

存储局部变量比存储全局变量更快。这是CPython实现的详细信息。

656
投票

在函数内部,字节码为:

  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        

在最顶层,字节码是:


40
投票

除了局部/全局变量存储时间外,操作码预测

使功能更快。

如其他答案所解释,该函数在循环中使用dis module操作码。这是函数循环的字节码:

© www.soinside.com 2019 - 2024. All rights reserved.