擅长:python、mysql、java
<p>每个普通函数对象都有一个对定义它的模块的全局命名空间的引用。第一个选项将在该名称空间中执行查找。当模块第一次执行时,字典本身只创建一次。由于引用存储在<code>add_1.__globals__</code>中,因此即使您只使用<code>import methods.add_1</code>或<code>from methods import add_1</code>,查找也会正常工作。在“LEGB”中查找“G(lobal)”可能比查找“L(ocal)”慢一些,但我不认为这里会有很大的差别</p>
<p>第二个选项在每次函数运行时创建一个新的dictionary对象。我希望这会超过将引用保存在本地命名空间中的任何查找优化。这种方法提供的一个优点是,它使您的词典有效地保持不变</p>
<p>虽然我直觉上希望第一个选项运行得更快,但您必须为这个微优化做一个基准测试才能确定。我怀疑这与您的Python实现、计算机体系结构、字典大小以及许多其他因素有很大关系</p>