До сих пор наши декораторы принимали ровно один аргумент - декорируемую функцию. А что если хочется написать что-то вроде @repeat(times=3) - декоратор, который сам настраивается параметром? Такое сплошь и рядом нужно на практике: @retry(max_attempts=5), @cache(ttl=60), @rate_limit(calls=100, period=60).
Аналогия: представь конструктор одежды на заказ. Ты приходишь в ателье и говоришь "хочу дождевик, но именно жёлтого цвета и с капюшоном". Ателье сначала изготавливает дождевик по твоим параметрам, и только потом этот готовый дождевик надевают на человека. Вот декоратор с параметрами устроен ровно так же: сначала одна функция настраивает будущий декоратор под конкретные параметры, и только потом этот настроенный декоратор применяется к целевой функции.