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

发现如果python代码正常运行,然后在python函数中运行,则在后一种情况下运行速度更快。我想知道为什么python代码在函数中运行得更快。

通常发现在python函数中存储局部变量要比全局变量更快。可以解释如下。

除了局部/全局变量存储时间外,操作码预测还使函数运行更快。

CPython是我们从Python.org下载的原始Python实现。它被称为CPython,以将其与更高版本的Python实现区分开来,并将语言引擎的实现与Python编程语言本身区分开来。

CPython恰好是用C语言实现的。CPython将我们的python代码编译为字节码,并在评估循环中解释该字节码。

编译函数时,局部变量存储在固定大小的数组(不是dict)中,并且变量名称分配给索引。这是可能的,因为您不能动态地将局部变量添加到函数中。然后检索一个局部变量实际上是对列表的指针查找和对PyObject的引用计数的增加,这是无关紧要的。

将此与全局查找进行比较,它是涉及哈希等的真正的dict搜索。顺便说一句,这就是为什么要使变量成为全局变量时需要指定global的原因:如果您在作用域内分配了变量,则编译器将发出STORE_FAST进行访问,除非您告知不要这样做。

顺便说一句,全局查找仍然非常优化。属性查询确实很慢!