Python中的迭代器、生成器、装饰器
程序员文章站
2022-04-29 18:40:25
当数据需要被使用时才会被生成,不会占用很多内存,需要用next()方法也可使用for循环获取,使用next()方法超出范围时会抛出Stopiteration异常,当函数中包含yield关键字,则函数就是一个生成器函数, 列表推导式:L = [i*2 for i in range(10)] 生 ......
当数据需要被使用时才会被生成,不会占用很多内存,需要用next()方法也可使用for循环获取,使用next()方法超出范围时会抛出stopiteration异常,当函数中包含yield关键字,则函数就是一个生成器函数,
列表推导式:l = [i*2 for i in range(10)]
生成器对象: l = (i*2 for i in range(10) )
1 def fab(max): 2 n,a,b = 0,0,1 3 c = 0 4 while n < max: 5 yield b 6 a,b = b, a+b 7 n = n + 1 8 9 # 使用for循环遍历结果 10 for n in fab(6): 11 print(n) 12 13 # 使用next()方法获取结果,用 .send()方法给定修改yield的数值为2 14 f = fab(30) 15 for i in range(10): 16 print(f.__next__()) 17 f.send(2) 18 19 # 可以作为参数给函数传参array.extend(iterable) 20 array = [] 21 array.extend(fab(8)) 22 print(array)
给函数添加新的功能,并不会改变原来函数的代码、调用方式和原有的返回结果。装饰器是利用函数嵌套的方法,实现在调用该函数之前进行一定的操作,装饰器一般返回以一个包装器(wrapper)
作用: 插入日志,性能测试,事务处理,缓存,权限效验等
3.
-
迭代器的概念:
1. 迭代器是访问集合元素的一种方式,
2. 迭代器是一个可以记住遍历的位置的对象。
3. 迭代器对象从集合的第一个元素开始访问,知道所有的元素被访问结束
4. 迭代器只能往前不能后退
5. 迭代器有两个基本的方法:iter() 和next(), iter()为创建迭代器对象
2. 应用
用迭代器实现 "斐波那锲数列"
class fibiterator(object): """斐波那契数列迭代器""" def __init__(self, n): """ :param n: int, 指明生成数列的前n个数 """ self.n = n # current用来保存当前生成到数列中的第几个数了 self.current = 0 # num1用来保存前前一个数,初始值为数列中的第一个数0 self.num1 = 0 # num2用来保存前一个数,初始值为数列中的第二个数1 self.num2 = 1 def __next__(self): """被next()函数调用来获取下一个数""" if self.current < self.n: num = self.num1 self.num1, self.num2 = self.num2, self.num1+self.num2 self.current += 1 return num else: raise stopiteration def __iter__(self): """迭代器的__iter__返回自身即可""" return self if __name__ == '__main__': fib = fibiterator(10) for num in fib: print(num, end=" ")