Module (16%)
Section (94%)

Краткий обзор замыканий: продолжение

Замыкание должно вызываться точно так же, как оно было объявлено.

В примере ниже:

def outer(par): loc = par def inner(): return loc return inner var = 1 fun = outer(var) print(fun())

функция inner() не имеет параметров, поэтому нам пришлось вызывать ее без аргументов.

Теперь посмотрите на код в редакторе. Полностью можно объявить замыкание, снабженное произвольным числом параметров, например как и функцией power().

Это означает, что замыкание не только использует замороженную среду, но и может изменить свое поведение, используя значения, взятые извне.

В этом примере показано еще одно интересное обстоятельство - Вы можете создать столько замыканий, сколько захотите, используя один и тот же кусок кода. Это делается с помощью функции с именем makeclosure(). Примечание:

  • первое замыкание, полученное из makeclosure(), определяет инструмент, возводящий в квадрат свой аргумент;
  • второй предназначен для возведения в куб аргумента.

Вот почему код производит следующий вывод:

0 0 0 1 1 1 2 4 8 3 9 27 4 16 64

output

Проведите свои собственные тесты.



Code

def make_closure(par):
loc = par

def power(p):
return p ** loc
return power


fsqr = make_closure(2)
fcub = make_closure(3)

for i in range(5):
print(i, fsqr(i), fcub(i))
{{ dockerServerErrorMsg }} ×
{{ errorMsg }} ×
{{ successMsg }} ×