decorator_2.py 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. from functools import wraps
  2. def upper(func):
  3. @wraps(func)
  4. def inner(*args, **kwargs):
  5. """
  6. Внутренняя функция декоратора
  7. """
  8. return func(*args, **kwargs).upper()
  9. return inner
  10. @upper
  11. def concatenate(*args):
  12. """
  13. Возвращает конкатенацию переданных строк
  14. """
  15. return ', '.join(args)
  16. def limit_qyery(func):
  17. call_counter = 0
  18. @wraps(func)
  19. def inner(*args, **kwargs):
  20. nonlocal call_counter
  21. call_counter += 1
  22. if call_counter == 4:
  23. print("Лимит вызовов закончен, все 3 попытки израсходованы")
  24. return
  25. return func(*args, **kwargs)
  26. return inner
  27. @limit_qyery
  28. def add(a: int, b: int):
  29. return a + b
  30. def main():
  31. # print(concatenate.__name__)
  32. # print(concatenate.__doc__.strip())
  33. print(add(4, 5))
  34. print(add(5, 8))
  35. print(add(9, 43))
  36. print(add(10, 33))
  37. print(add.__name__)
  38. if __name__ == "__main__":
  39. main()