Avi*_*ohn 6 python dynamic-dispatch libraries
我希望能够分派函数的不同实现,不仅基于第一个参数的类型,而且基于任意谓词.目前我必须这样做:
def f(param):
try:
if param > 0:
# do something
except TypeError:
pass
try:
if all(isinstance(item, str) for item in param):
# do something else
except TypeError:
raise TypeError('Illegal input.')
Run Code Online (Sandbox Code Playgroud)
这是我希望能够做到的精神:
@generic
def f(param):
raise TypeError('Illegal input.') # default
@f.when(lambda param: param > 0)
def f_when_param_positive(param):
# do something
@f.when(lambda param: all(isinstance(item, str) for item in param))
def f_when_param_iterable_of_strings(param):
# do something else
Run Code Online (Sandbox Code Playgroud)
它类似于Python 3 singledispatch,但singledispatch只支持对类型的调度,而不支持任意谓词.
TL; DR:是否有一个库允许基于任意谓词(不仅是参数的类型)的基于谓词的函数调度?
感谢各位的回复。在提出这个问题后,似乎没有现有的模块可以完全做到这一点。所以我自己写了:)它的灵感来自@Elazar的建议。
请随时查看。它位于 PyPI 上,您可以使用以下命令安装它:
pip install genericfuncs
Run Code Online (Sandbox Code Playgroud)
它也托管在 GitHub 上,我计划继续开发并添加功能,同时努力保持 API 简单。欢迎贡献。
| 归档时间: |
|
| 查看次数: |
612 次 |
| 最近记录: |