10函数名的应用,闭包,和迭代器

1、函数名的应用:

  函数的命明规范和变量是一样的

  函数名即变量名

  应用如下:

 1         可以作为列表中的元素进行存储
 2         def func1():
 3             pass
 4         def func2():
 5             pass
 6         lst = [func1,func2]
 7         for el in lst:
 8             el()
 9         可以作为参数传递给函数
10         def func():
11             pass
12         def proxy(fn):
13             fn()
14         proxy(func)
15         可以作为函数的返回值
16         def func():
17             def inner():
18                 pass
19             return inner
20         func()()

2、闭包

  闭包:在内层函数中访问外层函数的局部变量

  作用:

    1、可以保护变量不受外界影响

    2、可以让变量常驻内存,不会被释放。

  写法:    

 1             def outer():
 2                 a = 10
 3                 def inner():
 4                     print(a)
 5                 return inner
 6             正确使用姿势:
 7                 def outer():
 8                     a = 10 # 假设是一个很耗时的东西
 9                     def inner():
10                         print(a)
11                     return inner
12                 outer()()
13                 outer()()   ---错误使用姿势
14                 --------------
15                 ret = outer()
16                 ret()
17                 ret()    -----正确使用姿势

3、迭代器

  for循环的本质就是迭代器。

  可以用来遍历列表,字符串,元祖...可迭代对象

  可迭代对象:Iterale,里面有__iter__(),没有__next__()

  迭代器:Iterator,里面有__iter__(),还有__next__()

  迭代器特点:

    1、只能向前

    2、惰性机制

    3、省内存

  for循环的内部机制(即迭代器执行机制)

 1             1、首先获取到迭代器
 2             2、使用while循环获取数据
 3             3、it.__next__()来获取数据
 4             4、处理异常try:xxx except StopIteration:
 5 
 6             it = xx.__iter__()
 7             while 1:
 8                 try:
 9                     data = it.__next__()
10                     xxxxxx
11                 except StopIteration:
12                     break