# Базовый синтаксис декоратора в python def my_decorator(func): def wrapper_func(): # Делаем что-то до вызова функции func() # Делаем что-то после вызова функции return wrapper_func ''' def decorator(func): def wrapper(): print('Start decorator') func() print('Finish decorator') return wrapper ''' def decorator(func): def inner(*args, **kwargs): print('Стартуем декоратор') func(*args, **kwargs) print('Заканчиваем декоратор') return inner def decorator_2(func): def inner(*args, **kwargs): print('Стартуем декоратор') func_res = func(*args, **kwargs) print(f'Функция func вернула значение "{func_res}"') print('Заканчиваем декоратор') return func_res.swapcase() return inner @decorator_2 def say_hello_to(name, surname): return f'Hello {name} {surname}' decorator def my_func(): print('This is my mega function!') def header_h1(func): def inner(*args, **kwargs): result = func(*args, **kwargs) return f'

{result}

' return inner @header_h1 def one_more_func(name, surname): return f'Hello {name} {surname}' def repeater(func): def wrapper(*args, **kwargs): func(*args, **kwargs) func(*args, **kwargs) func(*args, **kwargs) return wrapper def text_decor(func): def inner(*args, **kwargs): print('Hello') return func(*args, **kwargs) print('Goodbye!') return inner @text_decor def multiply(num1, num2): print(num1 * num2) def double_it(func): '''Декоратор возвращает удвоенный результат вызова декорируемой функции''' def inner(*args, **kwargs): res = func(*args, **kwargs) return res * 2 return inner @double_it def get_sum_kwargs_values(**kwargs): return sum(kwargs.values()) def uppercase_elements(func): def inner(*args, **kwargs): res = func(*args, **kwargs) if isinstance(res, dict): return {key:value for key, value in res.items()} return inner @uppercase_elements def foo_1(**kwargs): return {1: 'one', 2: 'store', 'three': 3, 'four': 4} | kwargs def main(): # res = say_hello_to('Vasya', 'Ivanov') # print(f'{res=}') # res = one_more_func("gennadi", "LOSKOV") # print(f'{res=}') # print(multiply(3, 5)) # print(get_sum_kwargs_values(a=4, b=5, d=3, t=6, r=8)) print(foo_1(**{'Five': 5, 'sIx': 6})) if __name__ == '__main__': main()