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中lambda的用法及其与def的区别解析
Jul 28 Python
对于Python编程中一些重用与缩减的建议
Apr 14 Python
基于python实现简单日历
Jul 28 Python
选择python进行数据分析的理由和优势
Jun 25 Python
使用Python代码实现Linux中的ls遍历目录命令的实例代码
Sep 07 Python
python实现两个字典合并,两个list合并
Dec 02 Python
matplotlib绘制多个子图(subplot)的方法
Dec 03 Python
使用TFRecord存取多个数据案例
Feb 17 Python
Python文件操作模拟用户登陆代码实例
Jun 09 Python
Python根据指定文件生成XML的方法
Jun 29 Python
keras的三种模型实现与区别说明
Jul 03 Python
Python web框架(django,flask)实现mysql数据库读写分离的示例
Nov 18 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生成txt文件实例代码介绍
2016/04/28 PHP
php数据结构之顺序链表与链式线性表示例
2018/01/22 PHP
javascript编程起步(第七课)
2007/02/27 Javascript
初识javascript 文档碎片
2010/07/13 Javascript
读jQuery之十 事件模块概述
2011/06/27 Javascript
JQuery判断子iframe何时加载完成解决方案
2013/08/20 Javascript
iframe子页面获取父页面元素的方法
2013/11/05 Javascript
js实现百度联盟中一款不错的图片切换效果完整实例
2015/03/04 Javascript
JavaScript实现简单Tip提示框效果
2016/04/20 Javascript
JS获取鼠标选中的文字
2016/08/10 Javascript
本地Bootstrap文件字体图标引入却无法显示问题的解决方法
2020/04/18 Javascript
利用JavaScript在网页实现八数码启发式A*算法动画效果
2017/04/16 Javascript
jQuery实现模糊查询的方法分析
2018/05/10 jQuery
vue router 配置路由的方法
2018/07/26 Javascript
对Vue2 自定义全局指令Vue.directive和指令的生命周期介绍
2018/08/30 Javascript
VUE实现可随意拖动的弹窗组件
2018/09/25 Javascript
35个最好用的Vue开源库(史上最全)
2019/01/03 Javascript
Vue3 源码导读(推荐)
2019/10/14 Javascript
JavaScript函数重载操作实例浅析
2020/05/02 Javascript
Python函数学习笔记
2008/10/07 Python
python获取远程图片大小和尺寸的方法
2015/03/26 Python
python清除指定目录内所有文件中script的方法
2015/06/30 Python
Python简单实现阿拉伯数字和罗马数字的互相转换功能示例
2018/04/17 Python
Python基本socket通信控制操作示例
2019/01/30 Python
Python元组常见操作示例
2019/02/19 Python
pytorch 共享参数的示例
2019/08/17 Python
Python 脚本实现淘宝准点秒杀功能
2019/11/13 Python
jupyter notebook读取/导出文件/图片实例
2020/04/16 Python
CSS3制作缩略图的详细过程
2016/07/08 HTML / CSS
Aurora London官网:奢华、负担得起的皮革手袋
2020/08/01 全球购物
趣味运动会活动方案
2014/02/12 职场文书
幼儿园中班区域活动总结
2014/07/09 职场文书
活动总结结尾怎么写
2014/08/30 职场文书
2015年度招聘工作总结
2015/05/28 职场文书
在Java中Collection的一些常用方法总结
2021/06/13 Java/Android
Linux中如何安装并部署Redis
2022/04/18 Servers