Потому что, когда вы делаете:
@my_decorator()
def printer_hp():
...
Это эквивалентно:
printer_hp = my_decorator()(printer_hp)
Поскольку my_decorator()
возвращает wrapper
, тогда оно эквивалентно:
printer_hp = wrapper(printer_hp)
И то, что делает wrapper
, вызывает данную функцию 4 раза, поэтому printer_hp
вызывается 4 раза сразу.