Issue #29203: functools.lru_cache() now respects PEP 468

This commit is contained in:
Raymond Hettinger 2017-01-08 17:28:20 -08:00
parent 04316c4cc8
commit 4ee39141e8
4 changed files with 35 additions and 35 deletions

View file

@ -421,7 +421,7 @@ class _HashedSeq(list):
def _make_key(args, kwds, typed,
kwd_mark = (object(),),
fasttypes = {int, str, frozenset, type(None)},
sorted=sorted, tuple=tuple, type=type, len=len):
tuple=tuple, type=type, len=len):
"""Make a cache key from optionally typed positional and keyword arguments
The key is constructed in a way that is flat as possible rather than
@ -434,14 +434,13 @@ def _make_key(args, kwds, typed,
"""
key = args
if kwds:
sorted_items = sorted(kwds.items())
key += kwd_mark
for item in sorted_items:
for item in kwds.items():
key += item
if typed:
key += tuple(type(v) for v in args)
if kwds:
key += tuple(type(v) for k, v in sorted_items)
key += tuple(type(v) for v in kwds.values())
elif len(key) == 1 and type(key[0]) in fasttypes:
return key[0]
return _HashedSeq(key)