为什么将模块级代码放入函数中然后在Python中调用函数更快?

Why is putting the module level code into a function and then calling the function is faster in Python?

在Alex Martelli对使Python脚本面向对象的响应中,他提到在Python中将模块级代码放入函数,然后调用函数更快。有人能解释为什么以及它是否适用于所有的Python实现吗?


这主要是由于变量查找。在全局范围内查找变量需要字典查找。相反,编译器静态地确定本地名称并通过索引引用它们,因此不需要查找字典。

请注意,在python 2.x中,函数中存在exec语句将停用这种优化,因为名称不能再静态地确定。在python 3.x中,exec()是一个正则函数,因此不允许在本地范围内更改变量。