迭代器是python的强大功能之一,是访问集合元素的一种方式
迭代器是一个可以记住遍历位置的对象(使用 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 的使用时机,视需要而定~