Я пытался скорректить вывод, но так и не получилось.
Вот условие задачи:
Необходимо написать генераторную функцию solution, которая будет фильтровать данные из последовательности data функцией func_filter, к полученным данным применять функцию func_map и возвращать в качестве значения каждый второй элемент полученной последовательности. Нужно пользоваться здесь концепцией генератора, то есть обрабатывать не все данные разом, а только те, что необходимы для возвращения следующего значения. Дополните также код своей реализацией кэшируещего декоратора:
def cache_deco(func):
# YOUR CODE HERE
def solution(func_map, func_filter, data):
# YOUR CODE HERE
code = []
while data := input():
code.append(data)
code = "\n".join(code)
exec(code)
Мой код:
def cache_deco(func):
cache = {}
def wrapper(*args):
if args in cache:
return cache[args]
result = func(*args)
cache[args] = result
return result
return wrapper
def solution(func_map, func_filter, data):
filtered_data = filter(func_filter, data)
mapped_data = map(func_map, filtered_data)
next(mapped_data)
for data in mapped_data:
yield data
code = []
while data := input():
code.append(data)
code = "\n".join(code)
exec(code)
Вводные данные:
def calc():
count = 0
@cache_deco
def calc_(x):
nonlocal count
count += 1
print("Call:", count)
return x
return calc_
for i in solution(calc(), lambda x: x % 2 == 1, (1, 1, 2, 2, 2, 3, 1, 2, 3, 1)):
print(i)
Выходные данные по задаче:
Call: 1
1
Call: 2
3
3
Мои выходные данные:
Call: 1
1
Call: 2
3
1
3
1
*Тут либо проблема с декоратором, и он с кешем работает неверно. Либо я в функции накосячил. В общем, пожалуйста,
кто видит проблему, помогите исправить. Уже все перепробовал, не понимаю в чем ошибка.