len("asdf") len([1, 2, 3, 4, 5]) [1, 2, 3, 4, 5].__len__() def p(arg): if isinstance(arg, list): print("a list:") for e in enumerate(arg): print("{}: {}".format(*e)) elif isinstance(arg, str): print("a string:", arg) else: print("an unknown object:", repr(arg)) p([1, 2, 3, 4, 5]), p({}) from functools import singledispatch @singledispatch def pp(arg, verbose=False): print("an object:", repr(arg)) pp("asdf"), pp(123), pp([]) @pp.register(list) def pp_list(arg): print("a list:") for e in enumerate(arg): print("{}: {}".format(*e)) pp("asfd") pp([1, 2, 3, 4, 5]) @pp.register(int) @pp.register(float) def pp_number(obj): print("a number:", obj) pp(1) pp(1.0) pp.register(type(None), lambda _: print("nothing")) pp(None) pp.dispatch(list) pp.dispatch(int) pp.dispatch(dict) pp.registry.keys() from pkgutil import simplegeneric