为什么Python代码在函数中运行速度更快?
我们发现,如果Python代码正常运行,然后在Python函数中运行,则后者运行速度更快。我想知道为什么Python代码在函数中运行速度更快。
通常情况下,在Python函数中存储局部变量比全局变量更快。这可以用以下方式解释。
除了局部/全局变量存储时间外,操作码预测使函数运行速度更快。
CPython 是我们从 Python.org 下载的原始 Python 实现。之所以称为 CPython,是为了将其与后来的 Python 实现区分开来,并将其与 Python 编程语言本身区分开来。
CPython 恰好是用 C 语言实现的。CPython 将我们的 Python 代码编译成字节码,并在评估循环中解释该字节码。
编译函数时,局部变量存储在固定大小的数组中(而不是字典中),并且变量名分配给索引。这是可能的,因为你无法动态地向函数添加局部变量。然后,检索局部变量实际上是在列表中进行指针查找,并在 PyObject 上增加引用计数,这是微不足道的。
将其与全局查找进行比较,全局查找是涉及哈希等的真正的字典搜索。顺便说一句,这就是为什么如果你想要一个全局变量,你需要指定 global:如果你曾经在作用域内为一个变量赋值,除非你告诉它不要这样做,否则编译器将为它的访问发出 STORE_FAST 指令。
顺便说一句,全局查找仍然得到了很好的优化。属性查找才是真正慢的!
广告