1import functools # ползвам го за да достъпвам името на функцията, без него на 9ти ред f.__name__ връша "wrapper"
2
3memory = {} # ключ = адрес(малки букви, _), стойност = списък от (говорещ, фраза)
4
5def memnick(*funcs):
6 if funcs:
7 result = []
8 for f in funcs:
9 fname_key = f.__name__.lower().replace(" ", "_")
10 if fname_key in memory:
11 for speaker_name, phrase in memory[fname_key]:
12 result.append(f"С гласа на {speaker_name}: {phrase}")
13 return result
14
15 def decorator(func):
16 fname = func.__name__
17
18 @functools.wraps(func)
19 def wrapper(*args, **kwargs):
20 phrase = func(*args, **kwargs)
21 if "," in phrase:
22 addressed, _ = phrase.split(",", 1)
23 addressed = addressed.strip()
24 addressed_key = addressed.lower().replace(" ", "_")
25
26 if addressed_key not in memory:
27 memory[addressed_key] = []
28
29 speaker_name = " ".join(w.capitalize() for w in fname.split("_"))
30
31 if (speaker_name, phrase) not in memory[addressed_key]:
32 memory[addressed_key].append((speaker_name, phrase))
33 return phrase
34
35 return wrapper
36
37 return decorator
38
39"""
40@memnick()
41def божана():
42 return "Почекаин, ти си луд!"
43
44божана()
45
46@memnick()
47def бай_венци():
48 return "Емил, айде да играем шах!"
49
50бай_венци()
51
52@memnick()
53def бай_венци():
54 return "Емил, гладен съм!"
55
56бай_венци()
57
58@memnick()
59def емил():
60 return "Божана, намери сина ми."
61
62емил()
63
64@memnick()
65def емил():
66 return "Почекаин, нищо не става от тебе."
67
68емил()
69
70@memnick()
71def почекаин():
72 return "Божана, ще те любя."
73
74почекаин()
75
76print(memnick(емил, божана))
77print(memnick(бай_венци))
78print(memnick(почекаин))
79
80def баба():
81 pass
82
83func = баба
84print(func.__name__)
85func.__name__ = "дядо"
86print(баба.__name__)
87"""
.....
----------------------------------------------------------------------
Ran 5 tests in 0.001s
OK
15.03.2026 14:00