迭代器和生成器
凡是可以使用for循环取值的都是可迭代的可迭代协议: 内部含有__iter__方法的都是可迭代的迭代器协议 内部含有__iter方法和__next__方法的都是迭代器什么是迭代器 迭代器=iter(可迭代的).自带一个__next__方法 优势:节省内存\快 特性:惰性运算 常用的:列表\字典\元素\字符串\集合\range\文件句柄\enumeratepython 2和python3中的range区别 python2x种range不管range多少,会生成一个列表,这个列表将用来存贮所有的值 python3中,不管range多少,都不会实际的生成热呢一个值 python3种,有yield from生成器函数: 凡是带有yield的函数,就是一个生成器函数; 生成器函数的调用不会触发代码的执行,而是会返回一个生成器;想要生成器函数执行,用next() 记录当前所在的位置,等待 如何从生成器中取值? 1)next 随时都可以停止,最后一次会报错 2)for循环,从头到尾遍历一次,不遇到break\return不会停止 3)list\tuple 数据类型的强制转换 yield返回值的简便方法,如果本身就是循环一个可迭代的,且要把可迭代数据中的没一个元素都返回,可以用yield from 使用send的时候,在生成器创造出来之后需要进行预激活,可以用装饰器实现. 生成器用来解决内存问题和程序功能之间的解耦列表推导式: [i for i in rang(30) if i%3==0]生成器表达式 (i for i in rang(30) if i%3==0) 一个生成器只能取一次 生成器在不找他要值得时候,不取值.
原文地址:https://www.cnblogs.com/yimiaoyikan/p/8988384.html
时间: 2024-10-09 02:20:09