from functools import wraps def upper(func): @wraps(func) def inner(*args, **kwargs): """ Внутренняя функция декоратора """ return func(*args, **kwargs).upper() return inner @upper def concatenate(*args): """ Возвращает конкатенацию переданных строк """ return ', '.join(args) def limit_qyery(func): call_counter = 0 @wraps(func) def inner(*args, **kwargs): nonlocal call_counter call_counter += 1 if call_counter == 4: print("Лимит вызовов закончен, все 3 попытки израсходованы") return return func(*args, **kwargs) return inner @limit_qyery def add(a: int, b: int): return a + b def main(): # print(concatenate.__name__) # print(concatenate.__doc__.strip()) print(add(4, 5)) print(add(5, 8)) print(add(9, 43)) print(add(10, 33)) print(add.__name__) if __name__ == "__main__": main()