Краткий обзор замыканий: продолжение
Замыкание должно вызываться точно так же, как оно было объявлено.
В примере ниже:
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
Проведите свои собственные тесты.