哪个优化更好?
- 接收“字符串”的一系列 if/else 语句会为其返回适当的函数。 (大约 40-50 个 if/else 语句)。
- 维护键值对的字典。键作为字符串,值作为函数对象,以及一个用于搜索和返回函数对象的主函数。
使用上述方法实际返回函数对象的主函数将被调用数百万或数十亿次,因此需要智能地执行此操作。更好的方法是什么?
For e.g.
dict['str1'] = func1
dict['str2'] = func2
and so on..
def main_func(str):
return dict[str]
Or
def main_func(str):
if 'str1':
return func1
elif 'str2':
return func2
哪个会更好..?如果我们有50-60个这样的字符串,这个过程需要数十亿次。
将函数对象存储在函数本身的字典中:-
def func1():
if dict.has_key('str1'):
dict['str1'] = func1
-- do something --
这个和上面哪个更好。这看起来干净多了。但请记住,这些函数会被调用多次,因此 has_key 函数也会被调用多次。
Thanks
选择词典。
词典 ...
- 是内置的
- 是蟒蛇式的
- 需要更少的样板代码
- 与 if-else 线性 O(n) 复杂度相比,具有 O(1) 复杂度
- 并没有过早悲观(如果不进行分析,我们没有足够的理由相信这是一种效率较低的方法)
我建议首先使用字典编写解决方案,然后看看该解决方案是否足够快以满足您的需求。如果是这样,那就太好了,你就完成了。如果没有,则以其他方式计时。
考虑这样的解决方案(它将返回None
如果未找到该字符串):
func_dict = {}
func_dict['str1'] = fun1
func_dict['str2'] = fun2
...
def function_lookup(func_string):
return func_dict.get(func_string)
然后,在你的 main 中,简单地写function_lookup(whatever_string_variable)
尝试查找您的函数。这样可以避免每次都重新构建字典function_lookup
叫做。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)