2015-07-16 3 views
0

При изучении областей в python я сталкиваюсь с нижеследующим простым кодом. Мое сомнение в том, как передать параметр external_var и inner_var в функции.Передача параметра во внутреннюю функцию в Python

def outerfunc(outer_var): 
    def innerfunc(inner_var): 
     return outer_var * inner_var 
    return innerfunc 
+2

Доступ к 'outer_var' осуществляется через * закрытие *, и вы явно передаете' inner_var' - что вас сбивает с толку? Обратите внимание, что для вызова 'innerfunc' вам сначала нужно вызвать' outerfunc', чтобы получить к нему доступ - 'outerfunc (value_for_outer_var) (value_for_inner_var)'. – jonrsharpe

ответ

1

В принципе, да, это похоже на @jonrsharpe: это из-за закрытий.

Закрытие «закрывает» вокруг состояния в функции, которую можно использовать позже. Каждый раз, когда вы запускаете outerfunc(), код определит новую версию innerfunc(), у которой есть доступ к outer_var, который был передан за это время.

Закрытие - это то, что делают параметрические декораторы.

Смежные вопросы