Functions as decorators
In the partial application section, we saw how a function can be used to modify another function. A decorator is a syntax element in Python that conveniently allows us to alter the behavior of a function without changing the definition of the function itself. Let us start with the following situation:
Assume that we have a function that determines the degree of sparsity of a matrix:
def how_sparse(A): return len(A.reshape(-1).nonzero()[0])
This function returns an error if it is not called with an array object as input. More precisely, it will not work with an object that does not implement the reshape
method. For instance, the how_sparse
function will not work with a list, because lists have no reshape
method. The following helper function modifies any function with one input parameter so that it tries to make a type conversion to an array:
def cast2array(f): def new_function(obj): fA = f(array(obj)) return fA return new_function...