Написать параметрический декоратор (функцию или класс) DefArgs(*константы), которым можно декорировать функции с фиксированным числом позиционных параметров. Возвращаемая им функция должна принимать произвольное количество позиционных параметров, не большее чем у исходной функции. Все опущенные параметры должны получать соответствующие их позиции значения из кортежа константы. Если констант меньше, чем параметров декорируемой функции, декоратор инициирует исключение TypeError. Это же исключение инициируется при вызове функции со слишком большим количеством параметров. Дополнительно декоратор должен проверять, что тип параметров при вызове соответствует типу констант, в противном случае также инициировать исключение TypeError.

   1 @DefArgs(2, 3, 4)
   2 def mult(a, b):
   3     return a * b
   4 
   5 
   6 for args in (), (4,), (7, 8), (7, 8, 9), ("q", "w"):
   7     try:
   8         print(mult(*args))
   9     except TypeError:
  10         print("Nope")
  11 
  12 try:
  13     @DefArgs(2)
  14     def mult(a, b):
  15         return a * b
  16 except TypeError:
  17     print("Nope")

6
12
56
Nope
Nope
Nope


CategoryHomework

LecturesCMC/PythonIntro2023/Homework_DefArgs (последним исправлял пользователь FrBrGeorge 2023-11-14 10:30:27)