Using 'apply' as a decorator, to define constants
Steven D'Aprano
steve at REMOVE-THIS-cybersource.com.au
Fri Aug 21 22:54:27 EDT 2009
On Fri, 21 Aug 2009 15:17:40 -0700, Jonathan Gardner wrote:
>> Unfortunately, apply() has been removed as a built-in in 3.x. I'm not
>> sure if it has been relocated to a module somewhere, there's no mention
>> of such in the docs.
>
> apply = lambda f: f()
>
> It's one of those functions that is easier to define than import.
>>> apply = lambda f: f()
>>> __builtin__.apply(len, 'a')
1
>>> apply(len, 'a')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: <lambda>() takes exactly 1 argument (2 given)
It's a little bit more difficult to define it *correctly*. Here's a
working version of apply:
def apply(object, *args, **kwargs):
"""apply(object[, args[, kwargs]]) -> value
Call a callable object with positional and keyword arguments.
>>> apply(max, 'one', 'two', 'three', 'four', key=len)
'three'
"""
return object(*args, **kwargs)
Note that this:
* actually does what apply() is supposed to do;
* defines the function name, useful for tracebacks;
* has a docstring, useful for interactive use and documentation;
* includes an example suitable for automated testing with doctest.
--
Steven
More information about the Python-list
mailing list