Generic functions are one of my favorite features of the standard library. Python is a very dynamic language and through duck-typing, you will frequently be able to write code that works in many different conditions (it doesn't matter if you receive a list or a tuple), but in some cases, you will really need to have two totally different code bases depending on the received input.
For example, we might want to have a function that prints content of the provided dictionary in a human-readable format, but we want it also to work properly on lists of tuples and report errors for unsupported types.
The functools.singledispatch
decorator allows us to implement a generic dispatch based on argument type:
from functools import singledispatch @singledispatch def human_readable(d): raise ValueError('Unsupported argument type %s' % type(d)) @human_readable.register(dict) def human_readable_dict(d): for key, value in d.items(): print('{}: {}'.format(key...