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