Есть ли способ программно найти фрейм, в котором была определена функция? Я ищу что-то вроде функции get_defining_frame
, которая будет работать так:Получить объект кадра, который был определен в
def foo():
def bar():
pass
return bar
bar = foo()
get_defining_frame(foo) # should be the same as inspect.currentframe()
get_defining_frame(bar) # should be the frame created by the call to foo
Спасибо!
Мы пытаемся визуализировать код во время его запуска. Я вполне уверен, что этот фрейм еще должен быть доступен, хотя ... если в 'foo' была переменная' x', то вызов 'bar' после того, как этот факт все равно должен был получить доступ к' x', правильно? – user1196203
К 'x', да, но не к кадру, который также упоминается как' x'. Когда локальная переменная ссылается на вложенную функцию, она фактически становится переменной ячейки. Есть дополнительный слой косвенности по сравнению с обычными локальными переменными, именно поэтому объект рамки не должен придерживаться. Переменные ячейки сохраняются в живых (индивидуально), все остальное о объекте фрейма уничтожается. –