Multiple Dispatch
|Build Status| |Coverage Status| |Version Status|
一种相对合理的 Python 多重分派方法。
本多重分派实现高效、基本完整, 执行静态分析以避免冲突,并提供可选的命名空间 支持。 它的外观也很不错。
请参阅 https://multiple-dispatch.readthedocs.io/ 处的文档
示例
.. code-block:: python
from multipledispatch import dispatch
@dispatch(int, int) ... def add(x, y): ... return x + y
@dispatch(object, object) ... def add(x, y): ... return "%s + %s" % (x, y)
add(1, 2) 3
add(1, 'hello') '1 + hello'
此功能的作用
-
对所有非关键字参数进行分派
-
支持继承
-
支持实例方法
-
支持联合类型,例如
(int, float) -
支持内置抽象类,例如
Iterator, Number, ... -
缓存以实现快速重复查找
-
在函数定义时识别可能的歧义
-
在发生歧义时提供解决提示
-
支持带有可选关键字参数的命名空间
-
支持可变参数分派
此功能不支持
- 对角线分派
.. code-block:: python
a = arbitrary_type() @dispatch(a, a) def are_same_type(x, y): return True
- 高效更新:添加新签名需要对整个函数进行完整的解析。 当类型签名达到数百个时,这就会变得麻烦。
安装与依赖
multipledispatch 在 Python 软件包索引(PyPI)上:
::
pip install multipledispatch
它是纯 Python 实现的,仅依赖标准库。 它是一个轻量级依赖。
License
New BSD。参见 License file_。
Links
Five-minute Multimethods in Python by Guido_multimethods package on PyPI_singledispatch in Python 3.4's functools_Clojure Protocols_Julia methods docs_Karpinksi notebook: *The Design Impact of Multiple Dispatch*_Wikipedia article_PEP 3124 - *Overloading, Generic Functions, Interfaces, and Adaptation*_
.. _Five-minute Multimethods in Python by Guido:
http://www.artima.com/weblogs/viewpost.jsp?thread=101605
.. _multimethods package on PyPI:
https://pypi.python.org/pypi/multimethods
.. _singledispatch in Python 3.4's functools:
http://docs.python.org/3.4/library/functools.html#functools.singledispatch
.. _Clojure Protocols:
http://clojure.org/protocols
.. _Julia methods docs:
https://docs.julialang.org/en/v1/manual/methods/
.. _Karpinksi notebook: *The Design Impact of Multiple Dispatch*:
http://nbviewer.ipython.org/gist/StefanKarpinski/b8fe9dbb36c1427b9f22
.. _Wikipedia article:
http://en.wikipedia.org/wiki/Multiple_dispatch
.. _PEP 3124 - *Overloading, Generic Functions, Interfaces, and Adaptation*:
http://legacy.python.org/dev/peps/pep-3124/
.. |构建状态| image:: https://travis-ci.org/mrocklin/multipledispatch.svg :target: https://travis-ci.org/mrocklin/multipledispatch .. |版本状态| image:: https://pypip.in/v/multipledispatch/badge.svg :target: https://img.shields.io/pypi/v/multipledispatch.svg .. |覆盖率状态| image:: https://coveralls.io/repos/mrocklin/multipledispatch/badge.svg :target: https://coveralls.io/r/mrocklin/multipledispatch .. _许可证文件: https://github.com/mrocklin/multipledispatch/blob/master/LICENSE.txt