My thesis here is that one of the most common (legitimate) uses of lambda is as an adapter, to create an intermediary that allows a callable with a given signature to be used in places where a different signature is expected -- that is, altering the number or order of arguments passed to a given callable (and possibly also capturing the current value of some other variable in the process). I feel that it's more fruitful to focus on this "adapter" quality rather than focusing on the "anonymous function" quality.
Maybe the 'functional' module proposed in PEP 309[1] could provide such functions?
py> def ignoreargs(func, nargs, *kwd_names): ... def _(*args, **kwds): ... args = args[nargs:] ... kwds = dict((k, kwds[k]) ... for k in kwds if k not in kwd_names) ... return func(*args, **kwds) ... return _ ... py> def f(x, y): ... print x, y ... py> ignoreargs(f, 2)(1, 2, 3, 4) 3 4 py> ignoreargs(f, 2, 'a', 'b')(1, 2, 3, 4, a=35, b=64) 3 4
Steve
[1] http://python.fyxm.net/peps/pep-0309.html -- http://mail.python.org/mailman/listinfo/python-list