Задание
Вам предстоит реализовать функцию call_twice, которая должна
принять функцию и произвольный набор аргументов для неё,
вызвать функцию с заданными аргументами дважды,
вернуть пару из результатов вызовов (первый, затем второй).
Пример использования:
>>> call_twice(input, 'Enter value: ')
Enter value: foo
Enter value: bar
('foo', 'bar')
>>>
Мое решение
def call_twice(f, *args, **kwargs):
first_f = f(args, kwargs)
second_f = f(args, kwargs)
return first_f, second_f
Тест
def push_and_count(target, *, value):
target.append(target)
return len(target)
def shoot():
return 'Bang!'
def test_call_twice():
assert call_twice(push_and_count, [], value=42) == (1, 2), (
"Function should be called twice with same arguments!"
)
assert call_twice(shoot) == ('Bang!', 'Bang!')
Не только тест не проходит, но и выдает ошибку
TypeError: push_and_count() takes 1 positional argument but 2 were given
но я не знаю как это исправить. Предполагаю, что вложенные функции нужны, но без понятия, как их тут реализовать.
Как переписать функцию?