Предизвикателства > Abomination decorator > Решения > Решението на Димитър Фенерски

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

2 точки общо

4 успешни теста
0 неуспешни теста
Код

 1FLOW_IN = "in"
 2FLOW_OUT = "out"
 3
 4def memo():
 5    """ its juts a meme """
 6    meme_d = dict()
 7    def memer(fn):
 8        def memed(flow):
 9            if flow not in meme_d:
10                meme_d[flow] = fn(flow)
11            return meme_d[flow]
12        return memed
13    return memer
14
15@memo()
16def get_logger(flow):
17    """ Know not why not """
18    if flow == FLOW_IN:
19        return lambda *args: print(f"Invalid input arguments, expected {", ".join(args)}!")
20    elif flow == FLOW_OUT:
21        return lambda *args: print(f"Invalid output value, expected {", ".join(args)}!")
22    else:
23        return lambda *_: print('dont do this please')
24
25def type_check(flow):
26    """ Cast into despair any readers """
27    def whitelister(*whitelist_args):
28        whitelist = set([str(x) for x in whitelist_args])
29        def decorator(fn):
30            def decorated_fn(*args, **kwargs):
31                in_types = list(map(lambda v: str(type(v)),[*args, *kwargs.values()]))
32                if flow == FLOW_IN and any([in_type not in whitelist for in_type in in_types]):
33                    get_logger(flow)(*whitelist)
34                res = fn(*args, **kwargs)
35                if flow == FLOW_OUT and str(type(res)) not in whitelist:
36                    get_logger(flow)(*whitelist)
37                return res
38            return decorated_fn
39        return decorator
40    return whitelister
41
42
43# @type_check(FLOW_IN)(int, float, complex)
44# def power(num, power):
45#     return num ** power
46#
47# @type_check(FLOW_IN)(str)
48# @type_check(FLOW_OUT)(str)
49# def concatenate(*strings, separator=' beep boop '):
50#     return separator.join(strings)

....
----------------------------------------------------------------------
Ran 4 tests in 0.002s

OK

Дискусия
Димитър Фенерски
25.10.2024 23:43

thanks :)
Георги Кунчев
24.10.2024 21:25

Разбирам несъгласието ти. До известна степен си прав. Още вчера видяхме качени решения с подобен похват, които файлват. По принцип очакваме да питате, ако решите да интерпретирате условията по начин, който се различава от дадените примери, защото в твоя случай реално не получаваш същият резултат (или поне не винаги). Въпреки всичко, ще обсъдим и е възможно да променим тестовете, така че да считат това решение за валидно. Утрото е по-мъдро от вечерта.
Димитър Фенерски
24.10.2024 19:10

:@ order not defined
История
Това решение има само една версия.