Я хотел бы иметь возможность отправлять различные реализации функции, основанные не только на типе первого параметра, но и на основе произвольных предикатов. В настоящее время я должен сделать это так:Функциональный шаблон/сопоставление предикатов в Python
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: Существует ли библиотека, которая позволяет отправлять на основе предикатов функцию, основанную на произвольных предикатах (а не только на тип параметра)?
Oooh. Как явно-точный, полный ответ получает downvoted? Интересно. – Elazar