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