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 相关文章推荐
Java中重定向输出流实现用文件记录程序日志
Jun 12 Python
基于python select.select模块通信的实例讲解
Sep 21 Python
使用Python的package机制如何简化utils包设计详解
Dec 11 Python
python编程通过蒙特卡洛法计算定积分详解
Dec 13 Python
pyhton列表转换为数组的实例
Apr 04 Python
Python字符串匹配之6种方法的使用详解
Apr 08 Python
在pyqt5中QLineEdit里面的内容回车发送的实例
Jun 21 Python
利用python实现周期财务统计可视化
Aug 25 Python
python实现代码统计器
Sep 19 Python
Python实现使用dir获取类的方法列表
Dec 24 Python
python统计字符串中字母出现次数代码实例
Mar 02 Python
python获取淘宝服务器时间的代码示例
Apr 22 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
PDO预处理语句PDOStatement对象使用总结
2014/11/20 PHP
WordPress中用于获取文章作者与分类信息的方法整理
2015/12/17 PHP
php opendir()列出目录下所有文件的实例代码
2016/10/02 PHP
php格式文件打开的四种方法
2018/02/24 PHP
PHP hebrev()函数用法讲解
2019/02/21 PHP
php+mysql开发中的经验与常识小结
2019/03/25 PHP
jQuery+jqmodal弹出窗口实现代码分明
2010/06/14 Javascript
jQuery获得包含margin的outerWidth和outerHeight的方法
2015/03/25 Javascript
Jquery使用css方法改变样式实例
2015/05/18 Javascript
nodejs 中模拟实现 emmiter 自定义事件
2016/02/22 NodeJs
jQuery遍历DOM节点操作之filter()方法详解
2016/04/14 Javascript
基于jquery实现三级下拉菜单
2016/05/10 Javascript
js时间查询插件使用详解
2017/04/07 Javascript
JS判断两个对象内容是否相等的方法示例
2017/04/10 Javascript
详解angularjs中如何实现控制器和指令之间交互
2017/05/31 Javascript
js实现json数组分组合并操作示例
2019/02/12 Javascript
vue 导出文件,携带请求头token操作
2020/09/10 Javascript
[14:51]DOTA2 HEROS教学视频教你分分钟做大人-卓尔游侠
2014/06/13 DOTA
深入解析Python中的集合类型操作符
2015/08/19 Python
python中的编码知识整理汇总
2016/01/26 Python
Python中的descriptor描述器简明使用指南
2016/06/02 Python
Python中enumerate函数代码解析
2017/10/31 Python
Python爬取十篇新闻统计TF-IDF
2018/01/03 Python
Python多继承原理与用法示例
2018/08/23 Python
python2.7使用plotly绘制本地散点图和折线图
2019/04/02 Python
pycharm运行scrapy过程图解
2019/11/22 Python
Tensorflow中的dropout的使用方法
2020/03/13 Python
营业经理岗位职责
2013/11/10 职场文书
公司副总经理任命书
2014/06/05 职场文书
介绍信的格式
2015/01/30 职场文书
2015年十一国庆节演讲稿
2015/03/20 职场文书
2016党员三严三实心得体会
2016/01/15 职场文书
jquery插件实现搜索历史
2021/04/24 jQuery
为Centos安装指定版本的Docker
2022/04/01 Servers
Python中文分词库jieba(结巴分词)详细使用介绍
2022/04/07 Python
安装Windows Server 2012 R2企业版操作系统并设置好相关参数
2022/04/29 Servers