好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

python迭代器与生成器的详细介绍

一.什么玩意是迭代器?

第三个yield执行完成~

生成器表达式:使用类似于列表推导式的方法,但是返回的对象不再是一个列表,而是一个可以按需生成结果的一个对象(生成器)。

例1:

for i in (i for i in range(10000)):

print i

(i for i in range(5)) 这个就是生成器表达式。

(i for i in range(10000)) = def test(): for i in range(10000):yield i

这两个种写法起到的作用是一样的,只不过是写法不同,一个是生成器表达式,另一种是函数式生成器。

有没有觉得这种生成器表达式和列表推导式看起来很像,不同的地方就在于列表推导式是使用[]中括号,而生成器表达式使用的是()小括号?

事实就是如此,它们之间的语法确实只差一个括号,但是,生成器表达式更节省内存空间。

关于生成器,大致就说的差不多了,最后来个总结:

生成器的定义方法与普通的函数是一模一样的,不同的地方就是生成器使用yield返回一个值,函数使用return返回一个值。

在python中,生成器会自动实现迭代协议,在没有值可以返回的时候,返回一个StopIteration异常。

生成器使用yield语句返回一个值。yield语句挂起该生成器函数的状态,保留足够的信息,以便之后从它离开的地方继续执行。

下面的例子是列表推导式和生成器表达式执行的效率对比,感兴趣的小伙伴可以在自己电脑上执行一下试试。

#列表解析

sum([i for i in range(100000000)])#内存占用大,机器容易卡死

#生成器表达式

sum(i for i in range(100000000))#几乎不占内存

以上就是python迭代器与生成器的详细介绍的详细内容,更多请关注Gxl网其它相关文章!

查看更多关于python迭代器与生成器的详细介绍的详细内容...

  阅读:40次