欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > python >内容正文

python

Python之迭代器和生成器

发布时间:2025/7/14 python 50 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Python之迭代器和生成器 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

生成器和迭代器

提到生成器,总不可避免地要把迭代器拉出来对比着讲,生成器就是一个在行为上和迭代器非常类似的对象,如果把迭代器比作Android系统,

那么生成器就是ios,二者功能上差不多,但是生成器更优雅。

什么是迭代器

顾名思义,迭代器就是用于迭代操作(for循环)的对象,它像列表一样可以迭代获取其中的每一个元素,任何实现了 __next__ 方法的对象都可以成为迭代器

它与列表的区别在于,构建迭代器的时候,不像列表把所有元素一次性加载到内存,而是以一种延迟计算(lazy evaluation)方式返回元素,这正是它的优点。比如列表含有一千万个整数,需要占用400M的内存,而迭代器只需要几十个字节的空间。因为它并没有把所有元素装载到内存中,而是等到调用next方法时才返回该元素(call by need的方式),本质上for循环就是不断地调用迭代器的next方法。

什么是生成器

普通函数用return返回一个值,和Java等其他语言一样,然而在Python中还有一种函数,用关键字 yield 来返回值这种函数叫生成器函数,函数被调用时会返回一个生成器对象,生成器本质上还是一个迭代器,也是用在迭代操作中,因此它有和迭代器一样的特性,唯一的区别在于实现方式上不一样,后者更加简洁

最简单的生成器函数:

def func(n):yield n*2func <function func at 0x00000000029F6EB8>g = func(5)

func就是一个生成器函数,调用该函数时返回对象就是生成器 g ,这个生成器对象的行为和迭代器是非常相似的,可以用在for循环等场景中。注意yield对应的值在函数被调用时不会立刻返回,而是调用next方法时(本质上for循环也是调用next方法)才返回

>g = func(5) >next(g)>g = func(5) >for i in g:print(i)

为什么要用生成器呢?显然,用生成器在逼格上要比迭代器高几个等级,它没有那么多冗长代码了,而且性能上一样的高效

生成器表达式

生成器表达式与列表推导式很像,但是它俩返回的对象不一样,前者返回生成器对象,后者返回列表对象

>g = (x*2 for x in range(10)) >type(g) <type 'generator'>>l = [x*2 for x in range(10)] >type{l) <type 'list'>

 

转载于:https://www.cnblogs.com/Skeener/p/9903049.html

总结

以上是生活随笔为你收集整理的Python之迭代器和生成器的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。