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

inm*_*320 6 python optimization module function

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

Sve*_*ach 8

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

请注意,在Python 2.x中,exec函数内部的语句将停用此优化,因为名称不能再静态确定.在Python 3.x中,exec()是一个常规函数,因此不允许更改局部作用域中的变量.