Написать функцию whocall(depth=1), которая возвращает имя и названия параметров (строкой через пробел) одной из функций, вызов которой привёл к вызову whocall(). При depth=1 это функция, непосредственно вызвавшая whocall(), при depth=2 — функция, которая вызвала эту функцию и т. д. При depth=0 это сама whocall(). Если вызывающий объект не является функцией (например, это модуль) или depth превышает глубину стека вызовов, названия параметров — пустая строка; в последнем случае в качестве имени возвращается <UNIVERSE>.

   1 class C:
   2     def fun(self, arg, *args, kw="KW", **kwargs):
   3         return whocall(arg)
   4     lfun = lambda self, arg: whocall(arg)
   5 
   6 def fun():
   7     return whocall(1) 
   8 
   9 print(C().fun(0), C().lfun(0), fun())
  10 print(C().fun(1), C().lfun(1))
  11 print(C().fun(2, 3, 4, kw=123), C().lfun(2))
  12 print(C().fun(3), C().lfun(42))

   1 ('whocall', 'depth') ('whocall', 'depth') ('fun', '')
   2 ('fun', 'self arg args kw kwargs') ('<lambda>', 'self arg')
   3 ('<module>', '') ('<module>', '')
   4 ('<module>', '') ('<UNIVERSE>', '')


CategoryHomework

LecturesCMC/PythonIntro2023/Homework_WhoCall (последним исправлял пользователь FrBrGeorge 2023-12-28 17:10:56)