python 使用cycle构造无限循环迭代器


Posted in Python onDecember 02, 2020

一、引入方式

from itertools import cycle

二、使用方法

我们先来看看它的源码

python 使用cycle构造无限循环迭代器

cycle它接收一个可迭代对象,可以将一个可迭代对象转换为一个可以无限迭代的迭代器

源码里我们可以看到它实现了__iter__和__next__的魔术方法,说明它既是可迭代对象也是一个迭代器,我们可以使用for循环和next()方法去操作它

我们先来看看以普通的方式去遍历一个列表

li = ['python', 'java', 'c', 'ruby', 'php', 'javascript']
for i in li:
  print(i)

打印结果:

python 使用cycle构造无限循环迭代器

可以看到,遍历直到最后一个元素取完后就不再遍历了

接下来我们使用cycle来创建一个无限迭代的迭代器

from itertools import cycle

li = ['python', 'java', 'c', 'ruby', 'php', 'javascript']
cycle_iter = cycle(li)
for i in cycle_iter:
  print(i)

打印结果:

python 使用cycle构造无限循环迭代器

......

我们可以发现当遍历到最后一个元素结束后又会回到第一个元素,就这样无限循环下去形成了死循环,跟while死循环很相似

接下来我们使用next()进行迭代,看看会发生什么

from itertools import cycle

li = ['python', 'java', 'c', 'ruby', 'php', 'javascript']
cycle_iter = cycle(li)
print(next(cycle_iter))
print(next(cycle_iter))
print(next(cycle_iter))
print(next(cycle_iter))
print(next(cycle_iter))
print(next(cycle_iter))
print(next(cycle_iter))
print(next(cycle_iter))

打印结果:

python 使用cycle构造无限循环迭代器

我们发现当最后一个元素迭代完后,又继续迭代第一个元素,这跟普通的迭代器不一样,普通的迭代器最后一个元素迭代完后继续迭代,会抛出迭代停止的异常

三、应用场景
准备一批数据需要循环使用,并且需要一定的顺序,并不希望随机选取一个使用,这时cycle就起到了很好的作用,以我工作中为例,需要针对某知名网站爬取数据时,网站对你的请求频率做了限制,而你又需要更高效的获取这些数据,就可以使用cookie池,在循环发起请求时,就可以用next()方法按顺序去迭代获取cookie池中的数据用来发送请求,迭代完最后一个cookie后,又会回到第一个cookie,这样一来,当账号比较多时,每个账号使用到的频率时间就不会太大,也就达到了预期效果,部分代码截图示例:

python 使用cycle构造无限循环迭代器

温馨提示:爬虫一定要遵守网络相关法律,切不要存侥幸心理去触碰法律的底线,遵守被爬取对象的安全要求,不要暴力爬取,不要爬取涉及到安全和隐私的相关信息!

以上就是python 使用cycle构造无限循环迭代器的详细内容,更多关于python 构造无限循环迭代器的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python文件读写操作与linux shell变量命令交互执行的方法
Jan 14 Python
python单元测试unittest实例详解
May 11 Python
python安装mysql-python简明笔记(ubuntu环境)
Jun 25 Python
python九九乘法表的实例
Sep 26 Python
numpy中矩阵合并的实例
Jun 15 Python
python求质数的3种方法
Sep 28 Python
详解小白之KMP算法及python实现
Apr 04 Python
在Python中合并字典模块ChainMap的隐藏坑【推荐】
Jun 27 Python
Python3从零开始搭建一个语音对话机器人的实现
Aug 23 Python
python中调试或排错的五种方法示例
Sep 12 Python
python删除指定列或多列单个或多个内容实例
Jun 28 Python
pandas apply使用多列计算生成新的列实现示例
Feb 24 Python
python 使用csv模块读写csv格式文件的示例
Dec 02 #Python
python 发送邮件的四种方法汇总
Dec 02 #Python
如何用PyPy让你的Python代码运行得更快
Dec 02 #Python
python 实现波浪滤镜特效
Dec 02 #Python
python 如何对logging日志封装
Dec 02 #Python
python3中确保枚举值代码分析
Dec 02 #Python
python使用yaml 管理selenium元素的示例
Dec 01 #Python
You might like
PHP中绘制图像的一些函数总结
2014/11/19 PHP
PHP中使用array函数新建一个数组
2015/11/19 PHP
php + ajax 实现的写入数据库操作简单示例
2020/05/16 PHP
详解php反序列化
2020/06/10 PHP
javascript字典探测用户名工具
2006/10/05 Javascript
一个很简单的jquery+xml+ajax的无刷新树结构(无css,后台是c#)
2010/06/02 Javascript
关于Ext中form移除textfield方法:hide(),setVisible(false),remove()
2010/12/02 Javascript
Javascript中定义方法的另类写法(批量定义js对象的方法)
2011/02/25 Javascript
最佳的addEvent事件绑定是怎样诞生的
2011/10/24 Javascript
原生javascript实现DIV拖拽并计算重复面积
2015/01/02 Javascript
jQuery实现自动输入email、时间和域名的方法
2016/08/24 Javascript
基于JavaScript实现移动端无限加载分页
2017/03/27 Javascript
angularjs实现首页轮播图效果
2017/04/14 Javascript
微信小程序 request接口的封装实例代码
2017/04/26 Javascript
Node.js利用js-xlsx处理Excel文件的方法详解
2017/07/05 Javascript
nodejs中art-template模板语法的引入及冲突解决方案
2017/11/07 NodeJs
React和Vue中监听变量变化的方法
2018/11/14 Javascript
JavaScript两种计时器的实例讲解
2019/01/31 Javascript
JQuery样式与属性设置方法分析
2019/12/07 jQuery
jQuery带控制按钮轮播图插件
2020/07/31 jQuery
Python自定义函数的创建、调用和函数的参数详解
2014/03/11 Python
教大家玩转Python字符串处理的七种技巧
2017/03/31 Python
pandas中Timestamp类用法详解
2017/12/11 Python
python3之模块psutil系统性能信息使用
2018/05/30 Python
在Python中,不用while和for循环遍历列表的实例
2019/02/20 Python
python字符串的拼接方法总结
2019/11/18 Python
200行python代码实现贪吃蛇游戏
2020/04/24 Python
使用keras2.0 将Merge层改为函数式
2020/05/23 Python
Python字典实现伪切片功能
2020/10/28 Python
澳洲健康食品网上商店:Aussie Health Products
2018/06/15 全球购物
求职简历中个人的自我评价
2013/12/25 职场文书
体育课课后反思
2014/04/24 职场文书
食品安全工作方案
2014/05/07 职场文书
刑事撤诉申请书
2015/05/18 职场文书
JavaScript canvas实现流星特效
2021/05/20 Javascript
收音机爱好者玩机13年,简评其使用过的19台收音机
2022/04/30 无线电