допустим есть следующий код
def repeat(func): def wrapper(*args, **kwargs): for i in range(7): func(*args, **kwargs) return wrapper @repeat def speak(line): print(line) speak("Пожалуй это строка")
1. Функция speak попадает в декоратор repeat, функция speak принимает один единственный аргумент который после попадания в декоратор магическим образом передается в аргументы функции wrapper?
2. Зачем вообще функция wrapper если можно выполнить все в теле функции repeat?
3. Используется цикл for но его итератор не используется, как так?
4. Зачем вообще нужны декораторы?
Разъясните пожалуйста