ITADN
mrocklin/multipledispatch
mrocklin/multipledispatch · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

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