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

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

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

Python中的这段代码运行在(注意:时间是用Linux中的Bash中的Time函数完成的)。

real    0m1.841suser    0m1.828ssys     0m0.012s

但是,如果for循环没有放在函数中,

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

然后它运行的时间要长得多:

real    0m4.543suser    0m4.524ssys     0m0.012s

这是为什么?


BIG阳
浏览 577回答 3
3回答

喵喔喔

在函数内部,字节码是  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在顶层,字节码是  1           0 SETUP_LOOP              20 (to 23)               3 LOAD_NAME                0 (xrange)               6 LOAD_CONST               3 (100000000)               9 CALL_FUNCTION            1              12 GET_ITER                     >>   13 FOR_ITER                 6 (to 22)              16 STORE_NAME               1 (i)   2          19 JUMP_ABSOLUTE           13         >>   22 POP_BLOCK                    >>   23 LOAD_CONST               2 (None)              26 RETURN_VALUE区别在于STORE_FAST更快(!)比STORE_NAME..这是因为在一个函数中,i是一个地方性的,但在托普莱尔,它是一个全球性的。若要检查字节码,请使用dis模块..我能够直接反汇编函数,但为了反汇编toplevel代码,我必须使用compile内建.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python