Анастасия Гореленкова, 416 группа CorrectFloat 14651
Абрамов Валентин, 517 группа CorrectFloat 13934
n1"""n
2Спецкурс "Язык программирования Python" (Курячий, осень 2024)
3 
4Лекция 11 (18.11)
5Слоты, дескрипторы, декораторы
6 
7Задание 3
8Написать класс-параметрический декоратор Fix(n), с помощью которого все
9вещественные (как позиционные, так и именные) параметры произвольной
10декорируемой функции, а также её возвращаемое значение, округляются до n
>-го 
11знака после запятой (1 ⩽ n ⩽ 16). Если какие-то параметры функции оказал
>ись 
12не вещественными, или не вещественно возвращаемое значение, эти объекты 
>не 
13меняются. Обязательно использовать @wraps
14 
15 
16"""
17from functools import wraps1from functools import wraps
182
19class Fix:3class Fix:
204
21    def __init__(self, n):5    def __init__(self, n):
22        self.n = n6        self.n = n
237
n24    def __call__(self, func):n8    def __call__(self, f):
259
t26        @wraps(func)t10        @wraps(f)
27        def wrapped(*args, **kwargs):11        def wrapper(*args, **kwargs):
28            rounded_args = [round(arg, self.n) if isinstance(arg, float)12            round_args = [round(arg, self.n) if isinstance(arg, float) e
> else arg for arg in args]>lse arg for arg in args]
29            rounded_kwargs = {k: round(v, self.n) if isinstance(v, float13            round_kwargs = {k: round(v, self.n) if isinstance(v, float) 
>) else v for k, v in kwargs.items()}>else v for k, v in kwargs.items()}
30            result = func(*rounded_args, **rounded_kwargs)14            ret = f(*round_args, **round_kwargs)
31            return round(result, self.n) if isinstance(result, float) el15            return round(ret, self.n) if isinstance(ret, float) else ret
>se result 
32        return wrapped16        return wrapper
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op