Это легко объяснить:
Первый оператор печати в обеих функциях декорирования выполняется, как только вы декорируете функцию. Если вы пропустите вызов функции, вы получите вывод
3
1
Это потому, что внутренний декоратор print_three
вызывается первым, а print_one
декорирует функцию позже.
Операторы печати внутри функций-оболочек (которые изменяют вашу исходную функцию) выполняются при вызове функции. Поскольку print_four
не использует аргумент декоратора, вы просто декорируете его с помощью print_two
. Так что эквивалентом конечной функции будет что-то вроде
def major_print():
print(2)
print(4)
return None
Таким образом, вы получаете указанную последовательность чисел 3124 в качестве вывода на консоль.