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实现在无须过多援引的情况下创建字典的方法
Sep 25 Python
Python中处理unchecked未捕获异常实例
Jan 17 Python
Python字符串处理之count()方法的使用
May 18 Python
浅析Python中else语句块的使用技巧
Jun 16 Python
python遍历 truple list dictionary的几种方法总结
Sep 11 Python
Python实现单词翻译功能
Jun 06 Python
python实现贪吃蛇游戏
Mar 21 Python
pyqt 实现在Widgets中显示图片和文字的方法
Jun 13 Python
Python Django中间件,中间件函数,全局异常处理操作示例
Nov 08 Python
Python之变量类型和if判断方式
May 05 Python
Python常见反爬虫机制解决方案
Jun 01 Python
python 三种方法提取pdf中的图片
Feb 07 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
Zend Framework教程之Autoloading用法详解
2016/03/08 PHP
PHP通过curl获取接口URL的数据方法
2018/05/31 PHP
php fread函数使用方法总结
2019/05/28 PHP
php如何获取Http请求
2020/04/30 PHP
JQuery 风格的HTML文本转义
2009/07/01 Javascript
js 实现 input type="file" 文件上传示例代码
2013/08/07 Javascript
jquery实现倒计时代码分享
2014/06/13 Javascript
JS上传图片前实现图片预览效果的方法
2015/03/02 Javascript
jQuery实现可展开合拢的手风琴面板菜单
2015/09/15 Javascript
jQuery实现简单的文件上传进度条效果
2020/03/26 Javascript
使用angularjs创建简单表格
2016/01/21 Javascript
轻松掌握jQuery中wrap()与unwrap()函数的用法
2016/05/24 Javascript
jQuery实现级联下拉框实战(5)
2017/02/08 Javascript
AngularJS学习笔记之表单验证功能实例详解
2017/07/06 Javascript
vue-cli的eslint相关用法
2017/09/29 Javascript
基于Vue2.X的路由和钩子函数详解
2018/02/09 Javascript
Vue如何提升首屏加载速度实例解析
2020/06/25 Javascript
在Django的URLconf中使用命名组的方法
2015/07/18 Python
python实现图片处理和特征提取详解
2017/11/13 Python
python版飞机大战代码分享
2018/11/20 Python
Django实现auth模块下的登录注册与注销功能
2019/10/10 Python
pycharm实现在子类中添加一个父类没有的属性
2020/03/12 Python
详解Python+Selenium+ChromeDriver的配置和问题解决
2021/01/19 Python
HTML5 实战PHP之Web页面表单设计
2011/10/09 HTML / CSS
瑜伽国际:Yoga International
2018/04/18 全球购物
Charlotte Tilbury澳大利亚官网:英国美妆品牌
2018/10/05 全球购物
材料成型专业个人求职信范文
2013/09/25 职场文书
班主任新年寄语
2014/04/04 职场文书
创建文明城市标语
2014/06/16 职场文书
教师职业道德事迹材料
2014/08/18 职场文书
教代会闭幕词
2015/01/28 职场文书
父亲节寄语大全
2015/02/27 职场文书
现役军人家属慰问信
2015/03/24 职场文书
乡镇安全生产月活动总结
2015/05/08 职场文书
2016关于读书活动的心得体会
2016/01/14 职场文书
使用vue-element-admin框架从后端动态获取菜单功能的实现
2021/04/29 Vue.js