Mi piacerebbe essere in grado di inviare diverse implementazioni di una funzione, basate non solo sul tipo del primo parametro, ma sulla base di predicati arbitrari. Attualmente ho di farlo in questo modo:Corrispondenza modello/predicato funzione in 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.')
Ecco qualcosa nello spirito di quello che mi piacerebbe essere in grado di fare:
@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
E 'simile a Python 3 di singledispatch
, tuttavia singledispatch
supporta solo l'invio su tipi, non su predicati arbitrari.
TL; DR: Esiste una libreria che consente l'invio basato su predicati di una funzione basata su predicati arbitrari (non solo il tipo del parametro)?
Oooh. In che modo una risposta completa, dimostrabile in modo accurato, viene svalutata? Mi chiedo. – Elazar