| 
					
				 | 
			
			
				@@ -113,11 +113,6 @@ def limit_query(n): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return decorator
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@limit_query(3)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-def add(a: int, b: int):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return a + b
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 def monkey_patching(arg='Monkey', kwarg='patching'):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     def decorator(func):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         @wraps(func)
 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -155,10 +150,122 @@ def concatenate(**kwargs): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return result
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+def pass_arguments(*args_, **kwargs_):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def decorator(func):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        @wraps(func)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        def wrapper(*args, **kwargs):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            new_args = args + args_
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            new_kwargs = kwargs | kwargs_
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return func(*new_args, **new_kwargs)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return wrapper
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return decorator
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+def convert_to(type_):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def decorator(func):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        @wraps(func)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        def wrapper(*args, **kwargs):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return type_(func(*args, **kwargs))
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return wrapper
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return decorator
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@convert_to(str)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+def add_values(a, b):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return a + b
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+'''
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+def validate_all_args_str(func):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def wrapper(*args, **kwargs):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if len([True for x in args if type(x) == str]) == len(args):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return func(*args, **kwargs)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        else:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            print('Все аргументы должны быть строками')
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return wrapper  
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+'''
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+def validate_all_args(type_):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def decorator(func):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        @wraps(func)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        def wrapper(*args, **kwargs):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if len([True for x in args if type(x) == type_]) == len(args):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return func(*args, **kwargs)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            else:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                print(f'Все аргументы должны принадлежать типу {type_}')
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return wrapper
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return decorator
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@validate_all_args(set)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+def print_args_kwargs(*args, **kwargs):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for i, value in enumerate(args):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        print(i, value)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for k, v in sorted(kwargs.items()):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        print(f'{k} = {v}')
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+def compose(*args_):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def decorator(func):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        @wraps(func)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        def wrapper(*args, **kwargs):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            result = func(*args, **kwargs)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for f in args_:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                result = f(result)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return result
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return wrapper
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return decorator
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+def double_it(a):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return a * 2
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+def increment(a):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return a + 1
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@compose(double_it, increment)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+def get_sum(*args):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return sum(args)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+def add_attrs(**kwargs_):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def decorator(func):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        @wraps(func)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        def wrapper(*args, **kwargs):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return func(*args, **kwargs)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for key, value in kwargs_.items():
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            setattr(wrapper, key, value)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return wrapper
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return decorator
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@add_attrs(test=True, ordered=True)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+def add(a, b):
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return a + b
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 def main():
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    print(concatenate(a="Я", b="Выучу", c="Этот", d="Питон", e="!"))
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    print(add(10, 5))
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    print(add.test)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    print(add.ordered)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    # print(get_sum(5))
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    # print(get_sum(20, 10))
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    # print(get_sum(5, 15, 25))
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    # print_args_kwargs([], [1], [1, 2], b=set(), w=set())
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    # print_args_kwargs(1, 2, 3, 4, b=300, w=40, t=50, a=100)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    # result = add_values(10, 20)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    # print(f"Результат: {result}, тип результата {type(result)}")
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    # print(add(5, 4, 6, a=1, b=2))
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    # print(concatenate(a="Я", b="Выучу", c="Этот", d="Питон", e="!"))
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     # print_args_kwargs(1, 2, 3, 4, b=300, w=40, t=50, a=100)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 |