Это является невозможно получить на внутреннем объекте функции с кодом, как вы заявили, это - указанный объект только создается (по def
заявлению), когда внешняя функция работает (то есть, когда его вызывается).
Как и в сторону, отметим, что внешние функции, такие как foo
часто закодированы для возвращения внутренней функции в качестве результата (например, путем изменения bar()
к return bar
) в последней строке, точно работать в качестве «функциональных заводов» (часто , как «фабрики закрытия»), а не сохранить само существование внутренней функции как своего рода частной, секретной детали реализации; но ваша кодировка выбирает последний маршрут.
Редактировать ...:
Это является можно получить в кода объекта для внутренней функции, однако:
>>> def outer():
... def inner(): return 'boo'
... print inner()
...
>>> eval(outer.func_code.co_consts[1])
'boo'
>>>
Однако, в целом, чтобы сделать кодовый объект в вызываемой функции требует значительной работы (в этом специальном случае достаточно eval
, потому что внутренняя функция не имеет аргументов или нелокальных переменных, но, конечно, это нет в любом месте, даже близко к общему случаю ..., в которой вы должны предоставить такие тонкости, как крепления для nonlocals -!)
Последней вещью, что Foo делает это вызвать панель, почему просто не назвать Foo()? – PaulMcG
@paul, потому что foo() делает другие вещи помимо call bar(), которые я не хочу делать. – JesseW
", что я не могу легко изменить" Часто ложно. Попробуйте поговорить с автором. –