当前位置:  开发笔记 > 编程语言 > 正文

Python中的函数模式/谓词匹配

如何解决《Python中的函数模式/谓词匹配》经验,为你挑选了0个好方法。

我希望能够分派函数的不同实现,不仅基于第一个参数的类型,而且基于任意谓词.目前我必须这样做:

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.')

这是我希望能够做到的精神:

@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

它类似于Python 3 singledispatch,但singledispatch只支持对类型的调度,而不支持任意谓词.

TL; DR:是否有一个库允许基于任意谓词(不仅是参数的类型)的基于谓词的函数调度?

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有