TypeCheck/s02200176
TypeCheck/timofeevsy
n1def TypeCheck(types, restype):n1def TypeCheck(types, result):
2    ltypes = list(types)2    listed = list(types)
3    lt = len(ltypes)3    llist = len(listed)
44
5    def decorator(f):5    def decorator(f):
n6        def newf(*args, **kwargs):n6        def func(*args, **kwargs):
7            la = len(args)7            larg = len(args)
8            if(lt != la + len(kwargs)):8            if(llist != larg + len(kwargs)):
9                raise TypeError(9                raise TypeError(
n10                    f"Function {f.__name__} must have {lt} arguments")n10                    f"Function {f.__name__} must have {llist} arguments")
11            kwas = sorted(kwargs.items(), key=lambda x: x[0])11            sort_k = sorted(kwargs.items(), key=lambda x: x[0])
12            for i in range(la):12            for i in range(larg):
13                if (not isinstance(args[i], ltypes[i])):13                if (not isinstance(args[i], listed[i])):
14                    raise TypeError(14                    raise TypeError(
n15                        f"Type of argument {i+1} is not {ltypes[i]}")n15                        f"Type of argument {i+1} is not {listed[i]}")
16            for i in range(len(kwas)):16            for i in range(len(sort_k)):
17                if (not isinstance(kwas[i][1], ltypes[i+la])):17                if (not isinstance(sort_k[i][1], listed[i+larg])):
18                    raise TypeError(18                    raise TypeError(
t19                        f"Type of argument '{kwas[i][0]}' is not {ltypes[i]}")t19                        f"Type of argument '{sort_k[i][0]}' is not {listed[i]}")
20            res = f(*args, **kwargs)20            r = f(*args, **kwargs)
21            if(not isinstance(res, restype)):21            if(not isinstance(r, result)):
22                raise TypeError(f"Type of result is not {restype}")22                raise TypeError(f"Type of result is not {result}")
23            return res23            return r
24        return newf24        return func
25    return decorator25    return decorator
2626
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op