函数,闭包,迭代器
函数名:函数名可以说是一个变量,但它是一个特殊的变量,因为当它与小括号配合使用时就会执行函数.
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 #如果出现这种异常则结束