Sto cercando di scrivere un decoratore currying in python, e credo di aver avuto l'idea generale verso il basso, ma ancora ottenuto alcuni casi che non funzionano bene ...Currying decoratore in python
def curry(fun):
cache = []
numargs = fun.func_code.co_argcount
def new_fun(*args, **kwargs):
print args
print kwargs
cache.extend(list(args))
if len(cache) >= numargs: # easier to do it explicitly than with exceptions
temp = []
for _ in xrange(numargs):
temp.append(cache.pop())
fun(*temp)
return new_fun
@curry
def myfun(a,b):
print a,b
Mentre per il seguente caso questo funziona bene:
myfun(5)
myfun(5)
per il caso seguente non riesce:
myfun(6)(7)
Eventuali indicazioni su come farlo correttamente sarebbe molto apprezzato!
Grazie!
Perché non utilizzare qualcosa come parziale nei moduli functools? [link] (http://docs.python.org/library/functools.html#functools.partial) – astevanovic
@digivampire: Perché non fa curry, probabilmente. –
Per scrivere un decoratore per quale scopo? –