我希望能够分派函数的不同实现,不仅基于第一个参数的类型,而且基于任意谓词.目前我必须这样做:
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:是否有一个库允许基于任意谓词(不仅是参数的类型)的基于谓词的函数调度?