human
Here's a good function header given the following:
I wrote the below code

    def optimizer(loss, param):
        updates = OrderedDict()
        if (param is not list):
            param = list(param)
        for param_ in param:
            i = theano.shared(floatX(np.array(0)))
            i_int = i.astype('int32')
            value = param_.get_value(borrow=True)
            accu = theano.shared(np.zeros((value.shape + (n_win,)), dtype=value.dtype))
            grad = tt.grad(loss, param_)
            accu_new = tt.set_subtensor(accu[:, i_int], (grad ** 2))
            i_new = tt.switch(((i + 1) < n_win), (i + 1), 0)
            updates[accu] = accu_new
            updates[i] = i_new
            accu_sum = accu_new.sum(axis=1)
            updates[param_] = (param_ - ((learning_rate * grad) / tt.sqrt((accu_sum + epsilon))))
        return updates
    return optimizer

What's a good function header?
assistant
#Here's a good function header.

def adagrad_optimizer(learning_rate, epsilon, n_win=10):