python学习系列(六)迭代器生成器
2017-12-10 20:31
447 查看
迭代器是python的强大功能之一,是访问集合元素的一种方式
迭代器是一个可以记住遍历位置的对象(使用 yield)
迭代器从第一个元素开始迭代,知道全部访问完毕,只能向前不能后退
迭代器两个只要且重要的方法 :
生成器:在python中,使用了 yield 的方法称作生成器(generater)
生成器是一个返回迭代器的方法,只能用于迭代操作,简单理解:生成器就是一个迭代器!
例如:使用迭代器生成斐波那契数列(C# 中可使用递归算法实现)
生成器 fun()方法会返回一个新的迭代器 f ,这个 f 中一直执行 next()方法,next()每执行一次就返回当前的一个值,直到所有值全部返回完毕,结束!
在 fun()方法里用到了 yield ,其实也可以不用 yield ,如下图:
两个程序运行结果是一样的,这样看似就会有个矛盾:既然不用 yield 也可以实现,那上面 yield 是不是多余的呢?
答案:不多于
那什么时候用 yield ,什么时候不用呢?
没有 yield 的迭代,相当于生成了一个有 n 个元素的完整的 List ,这个 List 会很大;当我们需要在进行遍历的时候,每次循环只得到一个元素,这时候 yield 就很有用了,(这让我想得到了 C# 的协程了:yield return new watiforseconds(*)
)
总之,这个 yield 的使用时机,视需要而定~
迭代器是一个可以记住遍历位置的对象(使用 yield)
迭代器从第一个元素开始迭代,知道全部访问完毕,只能向前不能后退
迭代器两个只要且重要的方法 :
iter() next()
生成器:在python中,使用了 yield 的方法称作生成器(generater)
生成器是一个返回迭代器的方法,只能用于迭代操作,简单理解:生成器就是一个迭代器!
例如:使用迭代器生成斐波那契数列(C# 中可使用递归算法实现)
生成器 fun()方法会返回一个新的迭代器 f ,这个 f 中一直执行 next()方法,next()每执行一次就返回当前的一个值,直到所有值全部返回完毕,结束!
在 fun()方法里用到了 yield ,其实也可以不用 yield ,如下图:
两个程序运行结果是一样的,这样看似就会有个矛盾:既然不用 yield 也可以实现,那上面 yield 是不是多余的呢?
答案:不多于
那什么时候用 yield ,什么时候不用呢?
没有 yield 的迭代,相当于生成了一个有 n 个元素的完整的 List ,这个 List 会很大;当我们需要在进行遍历的时候,每次循环只得到一个元素,这时候 yield 就很有用了,(这让我想得到了 C# 的协程了:yield return new watiforseconds(*)
)
总之,这个 yield 的使用时机,视需要而定~
相关文章推荐
- python系列九:python3迭代器和生成器
- python学习笔记9-迭代器和生成器整理
- python系列之 - 迭代器、生成器
- python 学习2:生成器,迭代器,装饰器
- Python学习迭代器与生成器
- python学习笔记四 迭代器,生成器,装饰器(基础篇)
- python 学习2:生成器,迭代器,装饰器
- Python学习笔记(10)-生成器generator和迭代器Iterator
- python学习笔记-函数式编程、迭代器和生成器
- Python学习笔记--迭代器&生成器
- 深入学习python(二) 迭代器(Iterator)和生成器(Generate)
- python开发学习-day04(迭代器、生成器、装饰器、二分查找、正则)
- python学习之路 七 :生成器、迭代器
- python学习 生成器 列表生成式 迭代器
- python 从yield 学习迭代器和生成器
- python学习笔记(5)--迭代器,生成器,装饰器,常用模块,序列化
- python 学习生成器和迭代器 8皇后问题
- Python学习笔记——迭代器和生成器
- Python学习笔记010_迭代器_生成器
- python学习笔记之八:迭代器和生成器