gpt4 book ai didi

python - Python字典的推荐用法,函数作为值

转载 作者:太空狗 更新时间:2023-10-29 21:52:37 25 4
gpt4 key购买 nike

我正在寻找一些帮助来理解有关 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com