| f | from collections import defaultdict | f | from collections import defaultdict |
| from functools import wraps | | from functools import wraps |
| | | |
| | | |
| n | # Mutable default стойност обикновено е лоша идея | n | |
| # Но ако сте внимавали помните примера с @memoized | | |
| def memnick(*args, phrases=defaultdict(dict)): | | def memnick(*args, phrases=defaultdict(dict)): |
| if args: | | if args: |
| return sum((list(phrases.get(arg.__name__, {}).keys()) for arg in args), []) | | return sum((list(phrases.get(arg.__name__, {}).keys()) for arg in args), []) |
| | | |
| def decorator(func): | | def decorator(func): |
| @wraps(func) | | @wraps(func) |
| def decorated(*args, **kwargs): | | def decorated(*args, **kwargs): |
| result = func(*args, **kwargs) | | result = func(*args, **kwargs) |
| n | # Да, казахме ви, че променливи, които се използват 1-2 реда по-надолу веднъж и никога повече | n | |
| # обикновено нямат място в кода. Но колко добре ви изглежда да пляснем същото в квадратните скоби: | | |
| # phrases[result.split(",")[0].lower().replace(" ", "_")].append(phrase) | | |
| nick = result.split(", ")[0].lower().replace(" ", "_") | | nick = result.split(", ")[0].lower().replace(" ", "_") |
| t | # Спорно е дали дори долното `func.__name__.replace('_', ' ').title()` няма място в отделна променлива | t | |
| # но понеже е в f-string, а не в квадраните скоби - преживява се. | | |
| phrase = f"С гласа на {func.__name__.replace('_', ' ').title()}: {result}" | | phrase = f"С гласа на {func.__name__.replace('_', ' ').title()}: {result}" |
| phrases[nick][phrase] = phrase | | phrases[nick][phrase] = phrase |
| return result | | return result |
| | | |
| return decorated | | return decorated |
| | | |
| return decorator | | return decorator |
12.03.2026 17:29
12.03.2026 17:33
12.03.2026 17:30
12.03.2026 17:31