decorator.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. # Базовый синтаксис декоратора в python
  2. def my_decorator(func):
  3. def wrapper_func():
  4. # Делаем что-то до вызова функции
  5. func()
  6. # Делаем что-то после вызова функции
  7. return wrapper_func
  8. '''
  9. def decorator(func):
  10. def wrapper():
  11. print('Start decorator')
  12. func()
  13. print('Finish decorator')
  14. return wrapper
  15. '''
  16. def decorator(func):
  17. def inner(*args, **kwargs):
  18. print('Стартуем декоратор')
  19. func(*args, **kwargs)
  20. print('Заканчиваем декоратор')
  21. return inner
  22. def decorator_2(func):
  23. def inner(*args, **kwargs):
  24. print('Стартуем декоратор')
  25. func_res = func(*args, **kwargs)
  26. print(f'Функция func вернула значение "{func_res}"')
  27. print('Заканчиваем декоратор')
  28. return func_res.swapcase()
  29. return inner
  30. @decorator_2
  31. def say_hello_to(name, surname):
  32. return f'Hello {name} {surname}'
  33. decorator
  34. def my_func():
  35. print('This is my mega function!')
  36. def header_h1(func):
  37. def inner(*args, **kwargs):
  38. result = func(*args, **kwargs)
  39. return f'<h1>{result}</h1>'
  40. return inner
  41. @header_h1
  42. def one_more_func(name, surname):
  43. return f'Hello {name} {surname}'
  44. def repeater(func):
  45. def wrapper(*args, **kwargs):
  46. func(*args, **kwargs)
  47. func(*args, **kwargs)
  48. func(*args, **kwargs)
  49. return wrapper
  50. def text_decor(func):
  51. def inner(*args, **kwargs):
  52. print('Hello')
  53. return func(*args, **kwargs)
  54. print('Goodbye!')
  55. return inner
  56. @text_decor
  57. def multiply(num1, num2):
  58. print(num1 * num2)
  59. def main():
  60. # res = say_hello_to('Vasya', 'Ivanov')
  61. # print(f'{res=}')
  62. # res = one_more_func("gennadi", "LOSKOV")
  63. # print(f'{res=}')
  64. print(multiply(3, 5))
  65. if __name__ == '__main__':
  66. main()