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. Falling off the end of a procedure also returns None .
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.