@@ -43,7 +43,7 @@ def add(self, node: DoubleLinkedListNode) -> None:
43
43
prev = self .rear .prev
44
44
if prev is None :
45
45
raise ValueError ("Invalid list state" )
46
-
46
+
47
47
prev .next = node
48
48
node .prev = prev
49
49
self .rear .prev = node
@@ -53,7 +53,7 @@ def remove(self, node: DoubleLinkedListNode) -> DoubleLinkedListNode | None:
53
53
"""Remove node from list"""
54
54
if node .prev is None or node .next is None :
55
55
return None
56
-
56
+
57
57
node .prev .next = node .next
58
58
node .next .prev = node .prev
59
59
node .prev = node .next = None
@@ -111,27 +111,28 @@ def put(self, key: Any, value: Any) -> None:
111
111
112
112
def lru_cache (size : int = 128 ) -> Callable [[Callable [P , R ]], Callable [P , R ]]:
113
113
"""LRU Cache decorator"""
114
+
114
115
def decorator_func (func : Callable [P , R ]) -> Callable [P , R ]:
115
116
cache = LRUCache (size )
116
-
117
+
117
118
@wraps (func )
118
119
def wrapper (* args : P .args , ** kwargs : P .kwargs ) -> R :
119
120
key = (args , tuple (sorted (kwargs .items ())))
120
- cached = cache .get (key )
121
- if cached is not None :
121
+ if (cached := cache .get (key )) is not None :
122
122
return cached
123
-
123
+
124
124
result = func (* args , ** kwargs )
125
125
cache .put (key , result )
126
126
return result
127
-
127
+
128
128
# Add cache_info attribute
129
129
wrapper .cache_info = lambda : cache # type: ignore[attr-defined]
130
130
return wrapper
131
-
131
+
132
132
return decorator_func
133
133
134
134
135
135
if __name__ == "__main__" :
136
136
import doctest
137
+
137
138
doctest .testmod ()
0 commit comments