Да, вы можете видеть оболочку внутри функции, используя inspect или globals, и вы можете напрямую обращаться к объекту оболочки.
Вот простой пример, показывающий некоторые способы увидеть оболочку внутри функции.
#!/usr/bin/python
import sys
import inspect
def mydecorator(func):
def mywrapper():
print( 'in mywrapper' )
func()
return mywrapper
@mydecorator
def myfunc():
felf = globals()[inspect.getframeinfo(inspect.currentframe()).function]
print("** myfunc inspect : %s"%felf.__name__)
felf = globals()[sys._getframe().f_code.co_name]
print("** myfunc globals : %s"%felf.__name__)
print( 'wrapper =' )
print( myfunc )
print( 'done myfunc' )
myfunc()
print( 'wrapper =' )
print( myfunc )
Выше распечатывается,
in mywrapper
** myfunc inspect : mywrapper
** myfunc globals : mywrapper
wrapper =
<function mywrapper at 0x7f30df0e72a8>
done myfunc
wrapper =
<function mywrapper at 0x7f30df0e72a8>
Обратите внимание, что имя - это не имя вашей функции, а оболочка.См. Документацию inspect и getframe для получения дополнительной информации о том, какая информация доступна.