Your function will automatically be universal if you use only universal functions in it. If, however, your function uses functions that are not universal, you might get scalar results, or even an error when trying to apply them on an array:
def const(x): return 1 const(array([0, 2])) # returns 1 instead of array([1, 1])
Another example is the following:
def heaviside(x): if x >= 0: return 1. else: return 0. heaviside(array([-1, 2])) # error
The expected behavior would be that the heaviside function applied to a vector [a, b] would return [heaviside(a), heaviside(b)]. Alas, this does not work because the function always returns a scalar, no matter the size of the input argument. Besides, using the function with an array input would cause the statement if to raise an exception, as is explained in detail in Section 5.2.1: Boolean arrays.
The NumPy function vectorize...