Gradient Descent function

Why do we need to define another function grad() , if we already had the function gradientDescent()?

And also what is the use of np.zeros in fn gard()?
will the algorithm work if we dont use grad() but only gradientDescent()?