|
@@ -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)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
|
|
|
|
|
|
|