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