I'm trying to learn Python by reading the book Data Science from Scratch by Joel Grus, and on page 94 they describe how to approximate a derivative of f = x^2 using the following code
def difference_quotient(f, x, h):
return (f(x + h) - f(x)) / h
def square(x):
return x * x
def derivative(x):
return 2 * x
derivative_estimate = partial(difference_quotient, square, h=0.00001)
# plot to show they're basically the same
import matplotlib.pyplot as plt
x = range(-10,10)
plt.title("Actual Derivatives vs. Estimates")
plt.plot(x, map(derivative, x), 'rx', label='Actual')
plt.plot(x, map(derivative_estimate, x), 'b+', label='Estimate')
plt.legend(loc=9)
plt.show()
Everything works fine, but when I change the line derivative_estimate = partial(difference_quotient, square, h=0.00001)
to derivative_estimate = partial(difference_quotient, f=square, h=0.00001)
(because I think that is clearer to read), then I get the following error
Traceback (most recent call last):
File "page_93.py", line 37, in <module>
plt.plot(x, map(derivative_estimate, x), 'b+', label='Estimate')
TypeError: difference_quotient() got multiple values for keyword argument 'f'
What is going on here?
partial
comes from? Some library? I believe it is not built in. – Viqueliafunctools
. – Urbanaderivative_estimate = partial(f=difference_quotient, x =square , h=0.00001)
is the right way to do it. If the first argument is passed as a keyword argument then the rest of your arguments must be passed as keyword only arguments, otherwise you'll getSyntaxError: non-keyword arg after keyword arg
if you run Python 3.X – Quaff