Dzięki Jon Clements odpowiedź udało mi się zrobić funkcję, która zwraca uporządkowaną listę wszystkich rozmówców:
def f1():
names = []
frame = inspect.currentframe()
## Keep moving to next outer frame
while True:
try:
frame = frame.f_back
name = frame.f_code.co_name
names.append(name)
except:
break
return names
i kiedy nazywa się w łańcuchu:
def f2():
return f1()
def f3():
return f2()
def f4():
return f3()
print f4()
wygląda następująco:
['f2', 'f3', 'f4', '<module>']
W moim przypadku odfiltrować niczego '<module>'
i po, a następnie podjąć ostatnią pozycję, aby być nazwa dzwoniącego pochodzącymi.
lub zmodyfikować oryginalny pętlę ratować w pierwszej wygląd każdej nazwy rozpoczynające '<'
:
frame = frame.f_back
name = frame.f_code.co_name
if name[0] == '<':
break
names.append(name)
Od docs: 'To nie jest gwarantowana istnieć we wszystkich implementacjach Python.' – pradyunsg