作者:别禳莴觞芯_737 | 来源:互联网 | 2023-06-18 20:51
您可能会问 为什么 存储局部变量比存储全局变量更快。这是一个 CPython 实现细节。
请记住,CPython 被编译为解释器运行的字节码。编译函数时,局部变量存储在固定大小的数组( 不是 adict
)中,变量名称分配给索引。这是可能的,因为您不能动态地将局部变量添加到函数中。然后检索局部变量实际上是对列表的指针查找和引用计数的增加,PyObject
这是微不足道的。
将此与全局查找 ( ) 进行对比,后者是涉及哈希等LOAD_GLOBAL
的真正搜索。dict
顺便说一句,这就是为什么您需要指定global
i
是否希望它是全局的:如果您曾经分配给范围内的变量,编译器将发出STORE_FAST
s 访问它,除非您告诉它不要这样做。
顺便说一句,全局查找仍然非常优化。属性查找foo.bar
真的 很 慢!
这是关于局部变量效率的小插图。