import functools import timeit @functools.lru_cache() def untyped(*args, **kwargs): pass @functools.lru_cache(typed=True) def typed(*args, **kwargs): pass args = ['i', '"spam", i', '"spam", "spam", i', 'a=i', 'a="spam", b=i', 'a="spam", b="spam", c=i'] for f in ['untyped', 'typed']: for a in args: s = '%s(%s)' % (f, a) t = min(timeit.repeat(''' for i in range(100): %s ''' % s, setup='from __main__ import %s' % f, repeat=10, number=1000)) print('%6.3f %s' % (t, s))