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

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

DDD
DDD原创
2024-11-15 13:17:03478浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn