我正在寻找一些帮助来理解有关 Python 字典的最佳实践。
下面是一个例子:
def convert_to_celsius(temp, source):
conversion_dict = {
'kelvin': temp - 273.15,
'romer': (temp - 7.5) * 40 / 21
}
return conversion_dict[source]
def convert_to_celsius_lambda(temp, source):
conversion_dict = {
'kelvin': lambda x: x - 273.15,
'romer': lambda x: (x - 7.5) * 40 / 21
}
return conversion_dict[source](temp)
显然,这两个函数实现了相同的目标,但实现方式不同。有人可以帮助我理解两者之间的细微差别,以及继续解决这个问题的“最佳”方法是什么吗?
最佳答案
如果您在函数内创建了两个字典,那么前者会更有效率——虽然前者在只需要一个计算时执行两个计算,但后者版本的开销更多每次调用时创建 lambda:
>>> import timeit
>>> setup = "from __main__ import convert_to_celsius, convert_to_celsius_lambda, convert_to_celsius_lambda_once"
>>> timeit.timeit("convert_to_celsius(100, 'kelvin')", setup=setup)
0.5716437913429102
>>> timeit.timeit("convert_to_celsius_lambda(100, 'kelvin')", setup=setup)
0.6484164544288618
但是,如果将 lambda
的字典移动到 函数之外:
CONVERSION_DICT = {
'kelvin': lambda x: x - 273.15,
'romer': lambda x: (x - 7.5) * 40 / 21
}
def convert_to_celsius_lambda_once(temp, source):
return CONVERSION_DICT[source](temp)
那么后者效率更高,因为 lambda
对象只创建一次,并且该函数只在每次调用时进行必要的计算:
>>> timeit.timeit("convert_to_celsius_lambda_once(100, 'kelvin')", setup=setup)
0.3904035060131186
请注意,这只会在函数被多次调用(在本例中为 1,000,000 次)时才有好处,因此创建两个 lambda
函数对象的开销小于在只需要一个结果的情况下计算两个结果浪费了时间。
关于python - Python字典的推荐用法,函数作为值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29653009/