2014-02-06 3 views
1

Внутри функции, я могу использовать каталог (как правило), чтобы получить список вложенных функций:Python: доступ к вложенным функциям по имени

>>> def outer(): 
... def inner(): pass 
... print dir() 
... 
>>> outer() 
['inner'] 

... но что потом? Как я могу получить доступ к этим функциям по имени? Я не вижу атрибута __dict__.

ответ

1

Первый: Вы уверены, что хотите это сделать? Обычно это не очень хорошая идея. Тем не менее,

def outer(): 
    def inner(): pass 
    locals()['inner']() 

Вы можете использовать locals, чтобы получить словарь локальных значений переменных, а затем посмотреть значение 'inner', чтобы получить функцию. Однако не пытайтесь редактировать локальную переменную dict; это не сработает.


Если вы хотите получить доступ к внутренней функции вне внешней функции, вам нужно как-то ее сохранить. Локальные переменные не становятся атрибутами функции или что-то в этом роде; они отбрасываются при выходе из функции. Вы можете вернуть функцию:

def outer(): 
    def inner(): pass 
    return inner 

nested_func = outer() 
nested_func() 
+0

В случае, если вы заинтересованы, я хочу сделать словарь функций обработчика, и хотите, чтобы избежать добавления десятков строк, как 'обработчика [«Foo»] = Foo'. Я бы использовал лямбда, если бы мог ... – Doradus