Объекты внутренней функции не существуют до выполнения функции f (). Если вы хотите получить их, вам придется создать их самостоятельно. Это определенно нетривиально, потому что они могут быть замыканиями, которые захватывают переменные из области действия функции, и в любом случае требуют возиться с объектами, которые, вероятно, следует рассматривать как детали реализации интерпретатора.
Если вы хотите собирать функции с меньшим количеством повторений, я рекомендую один из следующих подходов:
a) Просто поместите функции в определение класса и верните ссылку на этот класс. Коллекция связанных функций, доступ к которым осуществляется по имени, ужасно пахнет как класс.
b) Создайте подкласс dict, который имеет метод для регистрации функций, и используйте его в качестве декоратора.
Код для этого будет выглядеть примерно так:
class FunctionCollector(dict):
def register(self, func):
self[func.__name__] = func
def f():
funcs = FunctionCollector()
@funcs.register
def get():
return 'get'
@funcs.register
def put():
return 'put'
return funcs
в) Поискайте в localals () и отфильтруйте функцию с помощью inspect.isfunction. (обычно не очень хорошая идея)