我有一个方法依赖于存储在 dict 中的一些值。也许这是一个微优化,但是在方法内部或外部定义 dict 更好吗?或者这真的很重要吗?示例代码:_values = {'a': 2, 'b': 3}def add_1(val): return _values[val] + 1要么:def add_1(val): _values = {'a': 2, 'b': 3} return _values[val] + 1然后代码将被导入并在其他地方使用(即不同的文件) ~ from methods import *。解释器在每种情况下尝试查找 dict 时采用的路径是什么?我的理解是,在方法范围之外查找 dict 稍微贵一些。
2 回答
尚方宝剑之说
TA贡献1788条经验 获得超4个赞
每个普通的函数对象都有一个对定义它的模块的全局命名空间的引用。第一个选项将在该命名空间中执行查找。字典本身只会在模块第一次执行时创建一次。由于引用存储在 中add_1.__globals__
,因此即使您只有import methods.add_1
或,查找也会正常工作from methods import add_1
。在“LEGB”中查找“G(lobal)”可能比“L(ocal)”稍慢,但我不认为这里会有很大差异。
每次函数运行时,第二个选项都会创建一个新的字典对象。我希望这会超过将引用保存在本地命名空间中的任何查找优化。这种方法确实提供的一个优点是它使您的字典有效地不可变。
虽然我直觉上希望第一个选项运行得更快,但您必须为此微优化做一个基准测试才能确定。我怀疑这与您的 Python 实现、计算机体系结构、字典大小和许多其他因素有很大关系。
添加回答
举报
0/150
提交
取消