Functions are objects, like everything else in Python. You may pass functions as arguments, change their names, or delete them. For example:
def square(x):
"""
Return the square of x
"""
return x ** 2
square(4) # 16
sq = square # now sq is the same as square
sq(4) # 16
del square # square doesn't exist anymore
print(newton(sq, .2)) # passing as argument
Passing functions as arguments is very common when applying algorithms in scientific computing. The function fsolve in scipy.optimize for computing a zero of a given function or quad in scipy.integrate for computing integrals are typical examples.
A function itself can have a different number of arguments with differing types. So, when passing your function f to another function g as an argument, make sure that f has exactly the form described in the docstring of g.
The docstring of fsolve gives information about its parameter func:
fun c -- A Python function...