为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

BIG阳 2019-07-09 16:17:09
为什么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这是为什么?
查看完整描述

3 回答

?
喵喔喔

TA贡献1735条经验 获得超5个赞

在函数内部,字节码是

  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内建.


查看完整回答
反对 回复 2019-07-09
  • 3 回答
  • 0 关注
  • 576 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信