函数,闭包,迭代器

函数名:函数名可以说是一个变量,但它是一个特殊的变量,因为当它与小括号配合使用时就会执行函数.

1.函数名可以放在列表中使用:

 1 def one():
 2     print(6)
 3 def two():
 4     print(66)
 5 li=[one,two]
 6 for a in li:
 7     a()
 8 
 9 输出结果:
10              6
11              66

2.函数可以当函数名的参数

 1 def one():
 2     print(6)
 3 def two(f):
 4     print(66)
 5     f()
 6 two(one)
 7 
 8 输出结果:
 9         66
10         6

3.函数可以作为函数的返回值:

 1 def one():
 2     print(6)
 3     def two():
 4         print(66)
 5     return two
 6 f=one()
 7 f()
 8 
 9 输出结果:
10         6
11         66

闭包:内层函数对外层函数变量的引用

python规定:如果你在内层函数中访问了外层函数的变量,那么这个变量在使用完并不会马上清空,它将会长期存储到内存中,可以方便你以后再次调用.

1 def one():
2     a=6
3     def two():
4         print(a)
5     return two

这种内层函数需要外层函数的变量时就产生了闭包,

当程序检测到内部函数会用到外部函数的变量时,就会将变量存储到内存中,方便外层函数结束时,内层函数也能正常调用

可迭代对象:Iterable,里面有__iter__()可以获取迭代器,没有__next__()  (注意每处下划线都是两个)

  迭代器:Iterator,里面有__iter__()可以获取迭代器,有__next__()

用迭代器模拟for循环:

1 #                        #列如我们要循环一个列表
2 a=[1,2,3]
3 li=a.__iter__()#首先获取到迭代器
4 while 1:          #使用while循环获取数据
5     try:            #尝试运行
6         li2=li.__next__()    #通过迭代器获得一个数据
7     except StopIteration:   #处理异常,只能处理写上的异常如(StopIteration)
8         break                        #如果出现这种异常则结束

猜你喜欢

转载自www.cnblogs.com/leo-tail-x/p/9456400.html