Skip to content

Instantly share code, notes, and snippets.

@mnowotnik
Last active August 29, 2015 14:17
Show Gist options
  • Save mnowotnik/27fa89a99c1e319bc3e5 to your computer and use it in GitHub Desktop.
Save mnowotnik/27fa89a99c1e319bc3e5 to your computer and use it in GitHub Desktop.
python curry
# -*- coding: utf-8 -*-
#author: Michał Nowotnik 2015
#public domain
def curry(func):
argc = func.func_code.co_argcount
def wrap(*args, **kwargs):
if argc <= len(args)+len(kwargs):
return func(*args, **kwargs)
fncp = partial(wrap, *args, **kwargs)
return fncp
return wrap
def lazy_curry(func):
argc = func.func_code.co_argcount
def wrap(*args, **kwargs):
if argc <= len(args)+len(kwargs):
return partial(func,*args, **kwargs)
fncp = partial(wrap, *args, **kwargs)
return fncp
return wrap
def partial(fnc, *args, **kwargs):
def wrap(*argsp, **kwargsp):
return fnc(*(args+argsp), **dict(kwargs,**kwargsp))
return wrap
#Usage
'''
>>>@lazy_curry
... def f(a,b,c):
return a+b+c
>>>f(1)(2)(3)()
6
>>>@curry
... def f(a,b,c):
return a+b+c
>>>f(1)(2)(3)
6
'''
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment