This value can be assigned to another name which can then also be used as a function. You might object that fib is not a function but a procedure. In Python, like in C, procedures are just functions that don't return a value. In fact, technically speaking, procedures do return a value, albeit a rather boring one. Writing the value None is normally suppressed by the interpreter if it would be the only value written.
Different types define different methods.
Methods of different types may have the same name without causing ambiguity. It is also possible to define functions with a variable number of arguments. There are three forms, which can be combined. The most useful form is to specify a default value for one or more arguments. This makes a difference when the default is a mutable object such as a list or dictionary.