It's simple, in the beta document, it shows
Given a Function object u, we can evaluate its values in various ways:
1. u(x) for an arbitrary point x
2. u.vector().array()[i] for degree of freedom number i
3. u.compute_vertex_values()[i] at vertex number i
The first method, though very flexible, is in general expensive while the other two are very efficient (but limited to certain points) .