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开发windows GUI程序入门实例
Oct 23 Python
用Python实现KNN分类算法
Dec 22 Python
Python常见排序操作示例【字典、列表、指定元素等】
Aug 15 Python
Python实现的服务器示例小结【单进程、多进程、多线程、非阻塞式】
May 23 Python
Python基于机器学习方法实现的电影推荐系统实例详解
Jun 25 Python
对Pytorch神经网络初始化kaiming分布详解
Aug 18 Python
pytorch模型预测结果与ndarray互转方式
Jan 15 Python
Windows系统下pycharm中的pip换源
Feb 23 Python
python GUI库图形界面开发之PyQt5选项卡控件QTabWidget详细使用方法与实例
Mar 01 Python
关于Python不换行输出和不换行输出end=““不显示的问题(亲测已解决)
Oct 27 Python
python实现高效的遗传算法
Apr 07 Python
python使用XPath解析数据爬取起点小说网数据
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
php5 non-thread-safe和thread-safe这两个版本的区别分析
2010/03/13 PHP
php中经典方法实现判断多维数组是否为空
2011/10/23 PHP
php中怎么搜索相关联数组键值及获取之
2013/10/17 PHP
使用phpstorm和xdebug实现远程调试的方法
2015/12/29 PHP
php基于CodeIgniter实现图片上传、剪切功能
2016/05/14 PHP
php版微信公众号自定义分享内容实现方法
2016/09/22 PHP
PHP正则匹配操作简单示例【preg_match_all应用】
2017/07/10 PHP
基于jquery可配置循环左右滚动例子
2011/09/09 Javascript
jQuery中创建实例与原型继承揭秘
2011/12/21 Javascript
屏蔽网页右键复制和ctrl+c复制的js代码
2013/01/04 Javascript
js 固定悬浮效果实现思路代码
2013/08/02 Javascript
JS简单实现元素复制示例附图
2013/11/19 Javascript
JS对象转换为Jquery对象实现代码
2013/12/29 Javascript
Javascript实现的常用算法(如冒泡、快速、鸽巢、奇偶等)
2014/04/29 Javascript
基于Bootstrap实现tab标签切换效果
2020/04/15 Javascript
关于JS变量和作用域详解
2016/07/28 Javascript
12 款 JS 代码测试必备工具(翻译)
2016/12/13 Javascript
JavaScript学习笔记之基于定时器实现图片无缝滚动功能详解
2019/01/09 Javascript
vue+ESLint 配置保存 自动格式化代码
2020/03/17 Javascript
使用Element的InfiniteScroll 无限滚动组件报错的解决
2020/07/27 Javascript
[05:03]2018DOTA2亚洲邀请赛主赛事首日回顾
2018/04/04 DOTA
在Ubuntu系统下安装使用Python的GUI工具wxPython
2016/02/18 Python
python使用ddt过程中遇到的问题及解决方案【推荐】
2018/10/29 Python
Python高级特性之闭包与装饰器实例详解
2019/11/19 Python
pandas DataFrame 数据选取,修改,切片的实现
2020/04/24 Python
HTML5中的Scoped属性使用实例
2014/04/23 HTML / CSS
BIBLOO捷克:购买女装、男装、童装、鞋和配件
2017/01/27 全球购物
.NET概念性的面试题
2012/02/29 面试题
用JAVA实现一种排序,JAVA类实现序列化的方法(二种)
2014/04/23 面试题
法学专业应届生求职信
2013/10/16 职场文书
高校辅导员推荐信范文
2013/12/25 职场文书
军训自我鉴定
2014/01/22 职场文书
如何写一份好的英文求职信
2014/03/19 职场文书
企业金融服务方案
2014/06/03 职场文书
行政二审代理词
2015/05/25 职场文书
婚礼伴郎致辞
2015/07/28 职场文书