August 2018
Intermediate to advanced
366 pages
10h 14m
English
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, value))
@human_readable.register(list)
@human_readable.register(tuple)
def human_readable_list(d):
for key, value in d:
print('{}: {}'.format(key, value))
Calling the three functions will properly dispatch the request to the right function:
>>> human_readable({'name': 'Tifa', 'surname': 'Lockhart'}) name: Tifa surname: Lockhart >>> human_readable([('name', 'Nobuo'), ('surname', ...