Предизвикателства > Мемник > Решения > Решението на Виктор Бечев

Резултати
2 точки от тестове
0 точки от учител

2 точки общо

5 успешни теста
0 неуспешни теста
Код (No comments)
Скрий всички коментари

 1from collections import defaultdict
 2from functools import wraps
 3
 4
 5def memnick(*args, phrases=defaultdict(dict)):
 6    if args:
 7        return sum((list(phrases.get(arg.__name__, {}).keys()) for arg in args), [])
 8
 9    def decorator(func):
10        @wraps(func)
11        def decorated(*args, **kwargs):
12            result = func(*args, **kwargs)
13            nick = result.split(", ")[0].lower().replace(" ", "_")
14            phrase = f"С гласа на {func.__name__.replace('_', ' ').title()}: {result}"
15            phrases[nick][phrase] = phrase
16            return result
17
18        return decorated
19
20    return decorator

.....
----------------------------------------------------------------------
Ran 5 tests in 0.001s

OK

Дискусия
История

f1from collections import defaultdictf1from collections import defaultdict
2from functools import wraps2from functools import wraps
33
44
n5# Mutable default стойност обикновено е лоша идеяn
6# Но ако сте внимавали помните примера с @memoized
7def memnick(*args, phrases=defaultdict(dict)):5def memnick(*args, phrases=defaultdict(dict)):
8    if args:6    if args:
9        return sum((list(phrases.get(arg.__name__, {}).keys()) for arg in args), [])7        return sum((list(phrases.get(arg.__name__, {}).keys()) for arg in args), [])
108
11    def decorator(func):9    def decorator(func):
12        @wraps(func)10        @wraps(func)
13        def decorated(*args, **kwargs):11        def decorated(*args, **kwargs):
14            result = func(*args, **kwargs)12            result = func(*args, **kwargs)
n15            # Да, казахме ви, че променливи, които се използват 1-2 реда по-надолу веднъж и никога повечеn
16            # обикновено нямат място в кода. Но колко добре ви изглежда да пляснем същото в квадратните скоби:
17            # phrases[result.split(",")[0].lower().replace(" ", "_")].append(phrase)
18            nick = result.split(", ")[0].lower().replace(" ", "_")13            nick = result.split(", ")[0].lower().replace(" ", "_")
t19            # Спорно е дали дори долното `func.__name__.replace('_', ' ').title()` няма място в отделна променливаt
20            # но понеже е в f-string, а не в квадраните скоби - преживява се.
21            phrase = f"С гласа на {func.__name__.replace('_', ' ').title()}: {result}"14            phrase = f"С гласа на {func.__name__.replace('_', ' ').title()}: {result}"
22            phrases[nick][phrase] = phrase15            phrases[nick][phrase] = phrase
23            return result16            return result
2417
25        return decorated18        return decorated
2619
27    return decorator20    return decorator
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op