Написать параметрический декоратор TypeCheck(последовательность_типов, тип_результата), который бросает исключение TypeError при вызове функции со следующим сообщением:

18
Type of argument 2 is not <class 'str'>

Еще примеры:

   1 @TypeCheck([int, int], int)
   2 def semivalid(a, b):
   3     return a/b if a%2 else a*b
   4 
   5 @TypeCheck((int for i in range(4)), int)
   6 def variable(*args, **kwargs):
   7     return len(args)+len(kwargs)

   1 >>> valid(3, "--", 10)
   2 18
   3 >>> valid(3, 7, 10)
   4 
   5 TypeError: Type of argument 2 is not <class 'str'>
   6 >>> valid(3, "--", "*")
   7 
   8 TypeError: Type of argument 3 is not <class 'int'>
   9 >>> valid(3, "--", c=1.23)
  10 
  11 TypeError: Type of argument 'c' is not <class 'int'>
  12 >>> semivalid(2, 2)
  13 4
  14 >>> semivalid(1, 2)
  15 
  16 TypeError: Type of result is not <class 'int'>
  17 >>> variable(1,2,3,4)
  18 4
  19 >>> variable(1,2,a=100, b=500)
  20 4
  21 >>> variable(1,2,a=100)
  22 
  23 TypeError: Function variable must have 4 arguments
  24 


CategoryHomework

LecturesCMC/PythonIntro2020/Homework_TypeCheck (последним исправлял пользователь FrBrGeorge 2020-11-22 19:48:50)