擅长:python、mysql、java
<p>如果<code>request_type</code>可以出现在多个类别中,则可以使用元组按优先级顺序遍历它们:</p>
<pre><code>categories = (
(category1, dispatch1method),
(category2, dispatch2method),
(category3, dispatch3method),
(category4, dispatch4method),
(category5, dispatch5method),
)
next(method for cat, method in categories if request_type in cat)(arguments)
</code></pre>
<p>否则,请使用<code>dict()</code>将类别类型映射到分派方法;重用上面相同的元组映射来构建分派:</p>
^{pr2}$
<p>然后查找请求类型:</p>
<pre><code>category_dispatch[request_type](arguments)
</code></pre>
<p>像这样的映射查找比扫描元组要快,在元组中,我们必须依次对每个类别进行测试,直到找到匹配项。在</p>
<p>实际上,可以通过颠倒相同的元组结构来维护优先级顺序,如下所示:</p>
<pre><code>category_dispatch = {}
for cat, dispatch in reversed(categories):
category_dispatch.update(dict.fromkeys(cat.keys(), dispatch))
</code></pre>
<p>因为现在给定的<code>request_type</code>键的最高优先级映射将最后输入到<code>category_dispatch</code>结构中。这将为您提供最快的分派,即使请求类型存在于多个类别中。在</p>
<p>缺点是,如果您的<code>category*</code>映射是动态的(请求类型会随着时间的推移添加到不同的类别并从中删除),那么您需要维护<code>category_dispatch</code>dict来反映这些更改。在</p>