我有5组请求的类别定义为python dicts,例如:
category1 = {'type1', 'type2', 'type3'}
category2 = {'type4', 'type5'}
category3 = {'type6', 'type7', 'type8', 'type9'}
category4 = {'type10', 'type11'}
category5 = {'type12', 'type13', 'type14'}
我需要使用它们的类别来处理请求,例如:
^{pr2}$我需要使用请求类型将请求发送到另一个函数来处理它。在
我已经知道在Python中有一些不需要使用if-elif的方法来调度这个请求,但是我的问题是:在保持代码干净和简单的同时,最好的方法是什么?在
我认为最干净的可能是两个映射,以使代码更具可读性。在
那么python就是这样:
^{pr2}$有一些方法可以用一个单一的数据结构来实现,但我认为没有一种方法能像这样清晰易懂。在
将类别映射到处理程序。不受地图大小的影响 O(1)进入时间。在
如果
request_type
可以出现在多个类别中,则可以使用元组按优先级顺序遍历它们:否则,请使用
^{pr2}$dict()
将类别类型映射到分派方法;重用上面相同的元组映射来构建分派:然后查找请求类型:
像这样的映射查找比扫描元组要快,在元组中,我们必须依次对每个类别进行测试,直到找到匹配项。在
实际上,可以通过颠倒相同的元组结构来维护优先级顺序,如下所示:
因为现在给定的
request_type
键的最高优先级映射将最后输入到category_dispatch
结构中。这将为您提供最快的分派,即使请求类型存在于多个类别中。在缺点是,如果您的
category*
映射是动态的(请求类型会随着时间的推移添加到不同的类别并从中删除),那么您需要维护category_dispatch
dict来反映这些更改。在相关问题 更多 >
编程相关推荐