首页 > 后端开发 > Python教程 > 为什么 Python 代码在函数内部执行时速度更快?

为什么 Python 代码在函数内部执行时速度更快?

DDD
发布: 2024-11-15 13:17:03
原创
476 人浏览过

Why is Python Code Faster When Executed Inside a Function?

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

考虑下面的 Python 代码片段,它执行了 1 亿次循环。

def main():
    for i in range(10**8):
        pass
main()
登录后复制

在 Linux 中使用时间函数测量时,这段代码运行得非常好swiftly:

real    0m1.841s
user    0m1.828s
sys     0m0.012s
登录后复制

奇怪的是,如果执行 for 循环时没有将其包含在函数中:

for i in range(10**8):
    pass
登录后复制

它的执行时间会大大增加:

real    0m4.543s
user    0m4.524s
sys     0m0.012s
登录后复制

为什么会出现这种差异?

内部函数

当代码位于函数内时,检查字节码会发现以下内容:

  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)是局部变量(在函数内)时使用 STORE_FAST,而当变量是全局变量(在函数外)时使用 STORE_NAME。前者的效率明显更高。

这可以通过以下事实来解释:当变量被声明为本地变量时,解释器可以优化代码以使用该变量的特定内存位置。然而,当一个变量被声明为全局变量时,解释器必须搜索整个全局范围才能找到该变量,这是一个比较耗时的过程。

以上是为什么 Python 代码在函数内部执行时速度更快?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板