Skip to content

Commit 9136bcc

Browse files
author
Gennadii Kandaurov
committed
add lesson #05 slides, hw
1 parent ce95a56 commit 9136bcc

File tree

4 files changed

+51
-2
lines changed

4 files changed

+51
-2
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
01. [Введение, типы данных, управляющие конструкции, тестирование](lesson-01)
66
02. [Функции](lesson-02)
77
03. [Классы, ООП](lesson-03)
8-
04. [Дескрипторы, метапрограммироование, ABC](lesson-04)
8+
04. [Дескрипторы, метапрограммирование, ABC](lesson-04)
9+
05. [Метаклассы, стандартная библиотека](lesson-05)
910

1011

1112
## Правила оформления домашек на github

lesson-02/homework.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ def process_json(
2323
json_str: str,
2424
required_keys: list[str] | None = None,
2525
tokens: list[str] | None = None,
26-
callback: Callable[[str, str], None] | None = None,
26+
callback: Callable[[str, str], Any] | None = None,
2727
) -> None:
2828
...
2929

lesson-05/homework.md

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# Домашнее задание #05 (стандартная библиотека)
2+
3+
### 1. LRU-кэш
4+
Интерфейс:
5+
6+
```py
7+
class LRUCache:
8+
9+
def __init__(self, limit=42):
10+
pass
11+
12+
def get(self, key):
13+
pass
14+
15+
def set(self, key, value):
16+
pass
17+
18+
19+
cache = LRUCache(2)
20+
21+
cache.set("k1", "val1")
22+
cache.set("k2", "val2")
23+
24+
assert cache.get("k3") is None
25+
assert cache.get("k2") == "val2"
26+
assert cache.get("k1") == "val1"
27+
28+
cache.set("k3", "val3")
29+
30+
assert cache.get("k3") == "val3"
31+
assert cache.get("k2") is None
32+
assert cache.get("k1") == "val1"
33+
34+
35+
Если удобнее, get/set можно сделать по аналогии с dict:
36+
cache["k1"] = "val1"
37+
print(cache["k3"])
38+
```
39+
40+
Сложность решения по времени в среднем должна быть константной O(1).
41+
Реализация любым способом без использования OrderedDict.
42+
43+
### 2. Тесты в отдельном модуле
44+
45+
### 3. Зеленый пайплайн в репе
46+
Обязательно: тесты, покрытие, flake8, pylint.
47+
Опционально можно добавить другие инструменты, например, mypy и black.
48+
Покрытие тестов должно составлять не менее 90%.

lesson-05/lesson-05.pdf

763 KB
Binary file not shown.

0 commit comments

Comments
 (0)