[Python-ideas] returning anonymous functions

Leif Walsh leif.walsh at gmail.com
Tue Dec 16 10:13:27 CET 2008


On Tue, Dec 16, 2008 at 3:40 AM, Mathias Panzenböck
<grosser.meister.morti at gmx.net> wrote:
> Thinking of it, we do not need any new syntax:
>
> def curry(f):
>    def _f(x).
>        def _f2(*args,**kwargs):
>            return f(x,*args,**kwargs)
>        return _f2
>    return _f
>
> @curry
> def foo(a,b,c):
>    return a+b+c

This forces you to call foo(1)(2)(3) if you want an answer.  How about:

def curry(f):
  def _f(*c_args, **c_kwargs):
    def _f2(*args, **kwargs):
      return f(*c_args, *args, **c_kwargs, **kwargs)
    return _f2
  return _f

@curry
def foo(a, b, c):
  return a + b + c

foo(1, 2)(3)

I think this still prevents us from currying multiple times --- that
is, you curry once, and you get a non-curriable function.  I remember
something in the wiki about a decorator in the form of an object, that
accumulated arguments when __call__()ed, and I think that worked best
(and still didn't need new syntax).

-- 
Cheers,
Leif


More information about the Python-ideas mailing list