Python中yield如何实现生成器,实现长尾函数的迭代?
- 内容介绍
- 文章标签
- 相关推荐
本文共计948个文字,预计阅读时间需要4分钟。
昨天看了不少博客,同时问了大伙一些心中的疑惑。对yield心中有些许理解,但可能没有理解到它的深层内涵。
昨天看了许多条博客同时问了大佬一些心中的疑惑对这个yield心中有了些许的理解虽然可能没有理解到他的内涵但至少在使用昨天看了许多条博客同时问了大佬一些心中的疑惑对这个yield心中有了些许的理解虽然可能没有理解到他的内涵但至少在使用时该如何使用还是有了些许了解因此决定写出来分享
首先我们得了解一个东西叫迭代器通常的for…in…循环中in后面是一个数组这个数组就是一个可迭代对象类似的还有链表字符串文件。它可以是mylist [1, 2, 3]也可以是mylist [x*x for x in range(3)]。 它的缺陷是所有数据都在内存中如果有海量数据的话将会非常耗内存。他们可以从内容从中一个一个的读取这就是迭代。
接着我们需要了解迭代器里的一个特殊——生成器生成器也是一个可以迭代的对象但是生成器每个只能迭代一次至于为什么后面会讲这是他特殊的原因。因为用的时候才生成。比如 mygenerator (x*x for x in range(3))注意这里用到了()它就不是数组而上面的例子是[]。生成器这里用的是小括号而迭代器用的是中括号。
好了接下来得讲下他们的方法不管是生成器还是迭代器都可以使用他的方法就是next这个方法在python2里面是使用的时候是方法c.next()在python3里面变为了函数next(c)但是由于迭代器可以自动进行相当于里面已经内嵌了这个方法生成一个迭代器他可以自动往后迭代但是生成器不一样生成一个生成器的时候他是定在初始状态的这就需要我们的next来一步一步推动他们。
本文共计948个文字,预计阅读时间需要4分钟。
昨天看了不少博客,同时问了大伙一些心中的疑惑。对yield心中有些许理解,但可能没有理解到它的深层内涵。
昨天看了许多条博客同时问了大佬一些心中的疑惑对这个yield心中有了些许的理解虽然可能没有理解到他的内涵但至少在使用昨天看了许多条博客同时问了大佬一些心中的疑惑对这个yield心中有了些许的理解虽然可能没有理解到他的内涵但至少在使用时该如何使用还是有了些许了解因此决定写出来分享
首先我们得了解一个东西叫迭代器通常的for…in…循环中in后面是一个数组这个数组就是一个可迭代对象类似的还有链表字符串文件。它可以是mylist [1, 2, 3]也可以是mylist [x*x for x in range(3)]。 它的缺陷是所有数据都在内存中如果有海量数据的话将会非常耗内存。他们可以从内容从中一个一个的读取这就是迭代。
接着我们需要了解迭代器里的一个特殊——生成器生成器也是一个可以迭代的对象但是生成器每个只能迭代一次至于为什么后面会讲这是他特殊的原因。因为用的时候才生成。比如 mygenerator (x*x for x in range(3))注意这里用到了()它就不是数组而上面的例子是[]。生成器这里用的是小括号而迭代器用的是中括号。
好了接下来得讲下他们的方法不管是生成器还是迭代器都可以使用他的方法就是next这个方法在python2里面是使用的时候是方法c.next()在python3里面变为了函数next(c)但是由于迭代器可以自动进行相当于里面已经内嵌了这个方法生成一个迭代器他可以自动往后迭代但是生成器不一样生成一个生成器的时候他是定在初始状态的这就需要我们的next来一步一步推动他们。

