mirror of
https://github.com/python/cpython.git
synced 2025-11-03 03:22:27 +00:00
merge
This commit is contained in:
commit
ac7c5acf9b
2 changed files with 13 additions and 4 deletions
|
|
@ -421,7 +421,7 @@ class _HashedSeq(list):
|
||||||
def _make_key(args, kwds, typed,
|
def _make_key(args, kwds, typed,
|
||||||
kwd_mark = (object(),),
|
kwd_mark = (object(),),
|
||||||
fasttypes = {int, str, frozenset, type(None)},
|
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
|
"""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
|
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
|
key = args
|
||||||
if kwds:
|
if kwds:
|
||||||
sorted_items = sorted(kwds.items())
|
|
||||||
key += kwd_mark
|
key += kwd_mark
|
||||||
for item in sorted_items:
|
for item in kwds.items():
|
||||||
key += item
|
key += item
|
||||||
if typed:
|
if typed:
|
||||||
key += tuple(type(v) for v in args)
|
key += tuple(type(v) for v in args)
|
||||||
if kwds:
|
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:
|
elif len(key) == 1 and type(key[0]) in fasttypes:
|
||||||
return key[0]
|
return key[0]
|
||||||
return _HashedSeq(key)
|
return _HashedSeq(key)
|
||||||
|
|
|
||||||
|
|
@ -1342,6 +1342,16 @@ class TestLRU:
|
||||||
self.assertEqual(fib.cache_info(),
|
self.assertEqual(fib.cache_info(),
|
||||||
self.module._CacheInfo(hits=0, misses=0, maxsize=None, currsize=0))
|
self.module._CacheInfo(hits=0, misses=0, maxsize=None, currsize=0))
|
||||||
|
|
||||||
|
def test_kwargs_order(self):
|
||||||
|
# PEP 468: Preserving Keyword Argument Order
|
||||||
|
@self.module.lru_cache(maxsize=10)
|
||||||
|
def f(**kwargs):
|
||||||
|
return list(kwargs.items())
|
||||||
|
self.assertEqual(f(a=1, b=2), [('a', 1), ('b', 2)])
|
||||||
|
self.assertEqual(f(b=2, a=1), [('b', 2), ('a', 1)])
|
||||||
|
self.assertEqual(f.cache_info(),
|
||||||
|
self.module._CacheInfo(hits=0, misses=2, maxsize=10, currsize=2))
|
||||||
|
|
||||||
def test_lru_cache_decoration(self):
|
def test_lru_cache_decoration(self):
|
||||||
def f(zomg: 'zomg_annotation'):
|
def f(zomg: 'zomg_annotation'):
|
||||||
"""f doc string"""
|
"""f doc string"""
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue