# Базовый синтаксис декоратора в 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()