def trace(func): def wrapper(*args, **kwargs): print(f'TRACE: calling {func.__name__}() ' f'with {args}, {kwargs}') original_result = func(*args, **kwargs) print(f'TRACE: {func.__name__}() ' f'
Ваш код не работает потому, что функция `say` ожидает два аргумента (`name` и `line`), но когда вы вызываете её в строке `print(say())`, вы не передаёте никаких аргументов.
Исправленный вариант вашего кода должен передавать необходимые аргументы в вызов функции `say`. Вот как это можно исправить:
```python
def trace(func):
def wrapper(*args, **kwargs):
print(f'TRACE: calling {func.__name__}() with {args}, {kwargs}')
original_result = func(*args, **kwargs)
print(f'TRACE: {func.__name__}() returned {original_result!r}')
return original_result
return wrapper
@trace
def say(name, line):
return f'{name}: {line}'
name = input("N: ")
line = input("L: ")
print(say(name, line)) # Передаем аргументы name и line
```
Теперь программа будет запрашивать у пользователя ввод имени и строки, а затем выводить результат работы функции `say` с этими аргументами.