I am trying to write a currying decorator in python. I got this far:
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)
While for the following case this works fine:
myfun(5)
myfun(5)
For the following case it fails:
myfun(6)(7)
How can I do this correctly?
If you're just looking to bind arguments to a function and aren't interested in a specific design or the underlying computer science principles, see Python Argument Binders.