upper() is a method whereas len() is a function.
Here i found something that might explain it a little better, it says:
Functions were used for those operations that were generic for a group of types and which were intended to work even for objects that didn’t have methods at all (e.g. tuples). It is also convenient to have a function that can readily be applied to an amorphous collection of objects when you use the functional features of Python (map(), apply() et al).
In fact, implementing len(), max(), min() as a built-in function is actually less code than implementing them as methods for each type. One can quibble about individual cases but it’s a part of Python, and it’s too late to make such fundamental changes now. The functions have to remain to avoid massive code breakage.
This just kind of explains why some are functions and some are methods. It can be extremely confusing when you start, because there are things like commands which are things like
Python documentation, (which is what the hyperlink leads to), can explain some of this better.
I don't have an exact, clear answer, but it's the same as calling a function. I don't know if you've started functions yet, but when calling a function you've previously defined, you use the parenthesis even if you don't have an argument to pass it. It's just correct syntax.
I hope this is what you're looking for!