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中使用OpenCV库来进行简单的气象学遥感影像计算
Feb 19 Python
Python实现的多线程同步与互斥锁功能示例
Nov 30 Python
Python如何发布程序的详细教程
Oct 09 Python
Python实现打砖块小游戏代码实例
May 18 Python
利用pyecharts实现地图可视化的例子
Aug 12 Python
python中的Elasticsearch操作汇总
Oct 30 Python
pycharm 2018 激活码及破解补丁激活方式
Sep 21 Python
Python中zipfile压缩文件模块的基本使用教程
Jun 14 Python
python时间序列数据转为timestamp格式的方法
Aug 03 Python
python获取天气接口给指定微信好友发天气预报
Dec 28 Python
基于Python-turtle库绘制路飞的草帽骷髅旗、美国队长的盾牌、高达的源码
Feb 18 Python
浅谈Python实现opencv之图片色素的数值运算和逻辑运算
Jun 23 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 Socket写的POP3类
2013/10/30 PHP
php封装的mongodb操作类代码
2017/08/06 PHP
ajax更新数据后,jquery、jq失效问题
2011/03/16 Javascript
基于jquery实现状态限定编辑的代码
2012/02/11 Javascript
Jquery index()方法 获取相应元素索引值
2012/10/12 Javascript
javascript实现的元素拖动函数宿主为浏览器
2014/07/21 Javascript
nodejs命令行参数处理模块commander使用实例
2014/09/17 NodeJs
Javascript中3个需要注意的运算符
2015/04/02 Javascript
JavaScript动态修改背景颜色的方法
2015/04/16 Javascript
JS使用正则表达式过滤多个词语并替换为相同长度星号的方法
2016/08/03 Javascript
JS基于HTML5的canvas标签实现炫目的色相球动画效果实例
2016/08/24 Javascript
AngularJs 利用百度地图API 定位当前位置 获取地址信息
2017/01/18 Javascript
详解Javascript中DOM的范围
2017/02/13 Javascript
js实现关闭网页出现是否离开提示
2017/12/07 Javascript
JavaScript实现无限级递归树的示例代码
2019/03/29 Javascript
Nodejs实现用户注册功能
2019/04/14 NodeJs
小程序实现日历左右滑动效果
2019/10/21 Javascript
[01:15:15]VG VS EG Supermajor小组赛B组胜者组第一轮 BO3第二场 6.2
2018/06/03 DOTA
Python实现控制台中的进度条功能代码
2017/12/22 Python
python实现外卖信息管理系统
2018/01/11 Python
python3 读写文件换行符的方法
2018/04/09 Python
Python应用库大全总结
2018/05/30 Python
利用Python正则表达式过滤敏感词的方法
2019/01/21 Python
Python搭建代理IP池实现接口设置与整体调度
2019/10/27 Python
如何通过python实现人脸识别验证
2020/01/17 Python
Pytorch 使用 nii数据做输入数据的操作
2020/05/26 Python
面向游戏玩家和书呆子的极客订阅盒:Loot Crate
2020/11/25 全球购物
蛋糕店的商业计划书范文
2014/01/27 职场文书
最新大学生创业计划书写作攻略
2014/04/02 职场文书
老师对学生的寄语
2014/04/09 职场文书
财务经理岗位职责
2015/01/31 职场文书
2015年幼儿园班主任个人工作总结
2015/10/22 职场文书
2019年自助餐厅创业计划书模板
2019/08/22 职场文书
Python+Appium自动化测试的实战
2021/06/30 Python
Redis高可用集群redis-cluster详解
2022/03/20 Redis
python中字符串String及其常见操作指南(方法、函数)
2022/04/06 Python