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使用asyncio包处理并发详解
Sep 09 Python
python中reader的next用法
Jul 24 Python
django将网络中的图片,保存成model中的ImageField的实例
Aug 07 Python
pytorch 更改预训练模型网络结构的方法
Aug 19 Python
python3实现高效的端口扫描
Aug 31 Python
Python 中的 import 机制之实现远程导入模块
Oct 29 Python
python将图片转base64,实现前端显示
Jan 09 Python
Python装饰器用法与知识点小结
Mar 09 Python
Python pysnmp使用方法及代码实例
Aug 24 Python
python help函数实例用法
Dec 06 Python
如何利用python 读取配置文件
Jan 06 Python
用Python仅20行代码编写一个简单的端口扫描器
Apr 08 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
真正根据utf8编码的规律来进行截取字符串的函数(utf8版sub_str )
2012/10/24 PHP
微信支付开发告警通知实例
2016/07/12 PHP
Thinkphp3.2简单解决多文件上传只上传一张的问题
2017/09/26 PHP
jQuery代码优化 选择符篇
2011/11/01 Javascript
jQuery消息提示框插件Tipso
2015/05/04 Javascript
vue.js树形组件之删除双击增加分支实例代码
2017/02/28 Javascript
js中变量的连续赋值(实例讲解)
2017/07/08 Javascript
微信小程序 rich-text的使用方法
2017/08/04 Javascript
详解 vue.js用法和特性
2017/10/15 Javascript
ES6解构赋值的功能与用途实例分析
2017/10/31 Javascript
JS 音频可视化插件Wavesurfer.js的使用教程
2018/10/31 Javascript
webpack4+express+mongodb+vue实现增删改查的示例
2018/11/08 Javascript
解决layui数据表格排序图标被超出的表头挤出去的问题
2019/09/19 Javascript
js get和post请求实现代码解析
2020/02/06 Javascript
使用vue编写h5公众号跳转小程序的实现代码
2020/11/27 Vue.js
举例详解Python中threading模块的几个常用方法
2015/06/18 Python
Python3 Random模块代码详解
2017/12/04 Python
python使用os.listdir和os.walk获得文件的路径的方法
2017/12/16 Python
python购物车程序简单代码
2018/04/18 Python
python random从集合中随机选择元素的方法
2019/01/23 Python
Python通过正则库爬取淘宝商品信息代码实例
2020/03/02 Python
Django 实现 Websocket 广播、点对点发送消息的代码
2020/06/03 Python
pycharm2020.2 配置使用的方法详解
2020/09/16 Python
AmazeUI 列表的实现示例
2020/08/17 HTML / CSS
Becextech新西兰:数码单反相机和手机在线商店
2018/04/27 全球购物
Windows和Linux动态库应用异同
2016/04/17 面试题
优质的学校老师推荐信
2013/10/28 职场文书
营业经理岗位职责
2013/11/10 职场文书
优良学风班总结材料
2014/02/08 职场文书
和解协议书
2014/04/16 职场文书
《青山处处埋忠骨》教学反思
2014/04/22 职场文书
个人承诺书格式
2014/06/03 职场文书
详解MySQL中的pid与socket
2021/06/15 MySQL
python生成可执行exe控制Microsip自动填写号码并拨打功能
2021/06/21 Python
详细了解java监听器和过滤器
2021/07/09 Java/Android
在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理
2022/04/14 Python