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中的WSGI接口
May 11 Python
你应该知道的python列表去重方法
Jan 17 Python
Python+Selenium+PIL+Tesseract自动识别验证码进行一键登录
Sep 20 Python
python pycurl验证basic和digest认证的方法
May 02 Python
对python特殊函数 __call__()的使用详解
Jul 02 Python
Python udp网络程序实现发送、接收数据功能示例
Dec 09 Python
django实现更改数据库某个字段以及字段段内数据
Mar 31 Python
如何把外网python虚拟环境迁移到内网
May 18 Python
解决Keras的自定义lambda层去reshape张量时model保存出错问题
Jul 01 Python
解决python3.6用cx_Oracle库连接Oracle的问题
Dec 07 Python
解决pycharm安装scrapy DLL load failed:找不到指定的程序的问题
Jun 08 Python
关于python pygame游戏进行声音添加的技巧
Oct 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
2006/10/09 PHP
php统计文章排行示例
2014/03/04 PHP
[原创]php集成安装包wampserver修改密码后phpmyadmin无法登陆的解决方法
2016/11/23 PHP
JS(jQuery)实现聊天接收到消息语言自动提醒功能详解【提示“您有新的消息请注意查收”】
2019/04/16 PHP
PHP FileSystem 文件系统常用api整理总结
2019/07/12 PHP
js中定义一个变量并判断其是否为空的方法
2014/05/13 Javascript
jQuery实现定时读取分析xml文件的方法
2015/07/16 Javascript
JS+DIV+CSS排版布局实现美观的选项卡效果
2015/10/10 Javascript
jQuery+CSS3实现四种应用广泛的导航条制作实例详解
2016/09/17 Javascript
JavaScript中的 attribute 和 jQuery中的 attr 方法浅析
2017/01/04 Javascript
用 js 的 selection range 操作选择区域内容和图片
2017/04/18 Javascript
vue router学习之动态路由和嵌套路由详解
2017/09/21 Javascript
js截取字符串功能的实现方法
2017/09/27 Javascript
利用百度地图API获取当前位置信息的实例
2017/11/06 Javascript
微信小程序实现tab切换效果
2017/11/21 Javascript
对angular 监控数据模型变化的事件方法$watch详解
2018/10/09 Javascript
[05:34]2014DOTA2国际邀请赛中国区预选赛精彩TOPPLAY第二弹
2014/06/25 DOTA
python写入已存在的excel数据实例
2018/05/03 Python
Python从文件中读取数据的方法讲解
2019/02/14 Python
Python3模拟curl发送post请求操作示例
2019/05/03 Python
python中的TCP(传输控制协议)用法实例分析
2019/11/15 Python
深入浅析Python 函数注解与匿名函数
2020/02/24 Python
Python调用C语言程序方法解析
2020/07/07 Python
css3 transform过渡抖动问题解决
2020/10/23 HTML / CSS
美国女士时尚珠宝及配饰购物网站:Icing
2018/07/02 全球购物
美国宠物美容和宠物用品购物网站:Cherrybrook
2018/12/07 全球购物
LINUX下线程,GDI类的解释
2016/12/14 面试题
自我鉴定书面格式
2014/01/13 职场文书
酒店端午节促销方案
2014/02/18 职场文书
公开服务承诺制度
2014/03/26 职场文书
巴西世界杯32强口号
2014/06/05 职场文书
房地产营销活动策划方案
2014/09/15 职场文书
演讲比赛主持词
2015/06/29 职场文书
开业典礼致辞
2015/07/29 职场文书
React Native项目框架搭建的一些心得体会
2021/05/28 Javascript
JS代码编译器Monaco使用方法
2021/06/11 Javascript