Python имя функции приложения / закрытия / итератора /

1. Применение имени функции.
  Имя функции является переменным, но это специальным переменным, и может быть выполнено с помощью скобок переменной функции.

    1. Адрес памяти из имени функции

 

DEF FUNC ():
     Печать ( " О " )
 Печать (FUNC)
 # Результат: <функция FUNC в 0x1101e4ea0>

 

    2. Имя функции может быть назначено на другие переменные

DEF FUNC ():
     Печать ( " О " )
 Печать (FUNC) = FUNC # функционировать в качестве переменной в другую переменную 
A () # функции вызова FUNC ()

    3. Имя элемента может быть использовано в качестве контейнеров

DEF func1 ():
     Печать ( " О " )
 DEF func2 ():
     Печать ( " О " )
 DEF FUNC3 ():
     Печать ( " О " )
 DEF Func4 ():
     Печать ( " О " ) 
LST = [func1, func2 , FUNC3]
 для I в LST: 
    я ()

4. Имя может быть использовано в качестве параметров функции

DEF FUNC ():
     Печать ( " съесть " )
 DEF func2 (ФН): 
  
Print ( " Я func2 " )
  Fn ()
# выполнить проход над Fn
  Print ( " Я func2 " ) func2 (FUNC) # положить параметры , передаваемые в функцию в качестве параметра FUNC func2 Fn.

Имя может быть использовано в качестве возвращаемого значения функции

 

DEF func_1 ():
     Печать ( " это функция 1. " )
     DEF func_2 ():
         Печать ( " это функция 2 " )
     для печати ( "это функция 1 " )
     возвращение func_2 
Fn = func_1 () # выполняет функции 1. Функция 2 является функцией возврата, на этот раз точка находится выше Fn 2 функции 
Fn () # выполнить указанную выше функцию возвращает

 

2. Закрытием
  Что такое замыкание? Затворы являются ссылкой на внутреннюю функцию, переменная функция внешнего слоя (не глобальный). Вызываются затворы

def outer():
  a = 10 # 很耗时
  def inner():
    print(a)
  return inner
# outer()()
# outer()()
ret = outer()
ret()
ret()
注意:我们可以使用__closure__来检测函数是否是闭包. 使用函数名.__closure__返回cell就是闭包. 返回None就不是闭包
def func1():
    name = "disman"
    def func2():
        print(name) # 闭包
func2()
print(func2.__closure__) # (<cell at 0x10c2e20a8: str object at 0x10c3fc650>,)
func1()

闭包好处:
  1. 保护变量
  2. 可以让一个变量常驻内存
  3. 迭代器
    __iter__() 可迭代对象. 获取迭代器
    __next__() + __iter__() 迭代器

  特点:
    1. 惰性机制
    2. 只能向前
    3. 节省内存
  for循环的内部就是迭代器

lst = [1,2,4]
it = lst.__iter__() # 获取迭代器
while 1:
  try:
      it.__next__() # 从迭代器中获取数据
  except StopIteration:
    break

Iterable: 可迭代的
Iterator: 迭代器

рекомендация

отwww.cnblogs.com/shagudi/p/10949205.html