Замыкание и декораторы

Разбор Д/З

Замыкание

Замыкание_(программирование)

  1. Функция — это объект
  2. Её можно изготовить внутри другой функции и вернуть
  3. …причём в зависимости от параметров этой другой функции!
  4. …в процессе чего некоторые объекты из ПИ создающей функции «залипают» в ПИ создаваемой
    • только они там навсегда должны залипнуть, а не только на время вызова
    • .__closure__

  5. Это и есть замыкание! (в других языках сложнее?)

   1 def f1(x):
   2     def f2():
   3         return x
   4     return f2

и

   1 def f1(x):
   2     def f2():
   3         def f3():
   4             return x
   5         return f3
   6     return f2

Also: nonlocal

Пример: def closurefun(param) vs nonclosurefun(param=param) простые примеры

пример

Декораторы

Частный случай замыкания — изготовление обёртки над функцией, т. е. конструктор функции

   1 def Debug(fun):
   2     def newfun(*argp, **argn):
   3         print("###", argp, argn)
   4         return fun(*argp, **argn)
   5     return newfun
   6 
   7 @Debug  # Включить отладку
   8 def funct(a,b,c=0):
   9     return a+b*c
  10 
  11 a = funct(2,3,4)
  12 # Dfunct = Debug(funct) # Отладка вручную без @Debug
  13 # a = Dfunct(3,4,5)     # Отладка вручную
  14 #   или
  15 # a = Debug(funct)(3,4,5)   # Отладка вручную
  16 print(a)

Параметрические декораторы (конструкторы декораторов!)

Декораторы методов, в частности: property, classmethod, staticmethod`

статья на хабре

вторая часть статьи (+декораторы методов)

примеры

Д/З

TODO

LecturesCMC/PythonIntro2017/12_DecoratorClosure (последним исправлял пользователь FrBrGeorge 2017-12-11 17:32:41)