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之入门(五)缩进和选择
May 27 Python
Python创建模块及模块导入的方法
May 27 Python
Python利用ansible分发处理任务
Aug 04 Python
Python创建xml文件示例
Mar 22 Python
有趣的python小程序分享
Dec 05 Python
Python验证文件是否可读写代码分享
Dec 11 Python
python实现图片识别汽车功能
Nov 30 Python
python__name__原理及用法详解
Nov 02 Python
Python 模拟动态产生字母验证码图片功能
Dec 24 Python
Python super()函数使用及多重继承
May 06 Python
解决pycharm安装第三方库失败的问题
May 09 Python
详解Python IO编程
Jul 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入门学习的几个不错的实例代码
2008/07/13 PHP
PHP 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解
2013/06/25 PHP
php中的ini配置原理详解
2014/10/14 PHP
PHP验证码类ValidateCode解析
2017/01/07 PHP
php装饰者模式简单应用案例分析
2019/10/23 PHP
JavaScript 模仿vbs中的 DateAdd() 函数的代码
2007/08/13 Javascript
JavaScript 设计模式学习 Factory
2009/07/29 Javascript
JavaScript 学习笔记(十四) 正则表达式
2010/01/22 Javascript
javascript学习笔记(三)显示当时时间的代码
2011/04/08 Javascript
JS跨域总结
2012/08/30 Javascript
解析javascript 数组以及json元素的添加删除
2013/06/26 Javascript
JavaScript初学者建议:不要去管浏览器兼容
2014/02/04 Javascript
jQuery之选项卡的简单实现
2014/02/28 Javascript
jquery分割字符串的方法
2015/06/24 Javascript
关于网页中的无缝滚动的js代码
2016/06/09 Javascript
基于JS设计12306登录页面
2016/12/28 Javascript
详解javascript函数写法大全
2019/03/25 Javascript
微信小程序自定义navigationBar顶部导航栏适配所有机型(附完整案例)
2020/04/26 Javascript
跟老齐学Python之Python安装
2014/09/12 Python
基于Python中capitalize()与title()的区别详解
2017/12/09 Python
Tensorflow加载预训练模型和保存模型的实例
2018/07/27 Python
centos6.5安装python3.7.1之后无法使用pip的解决方案
2019/02/14 Python
在Python中获取操作系统的进程信息
2019/08/27 Python
Python 词典(Dict) 加载与保存示例
2019/12/06 Python
通俗讲解python 装饰器
2020/09/07 Python
Waterford美国官网:爱尔兰水晶制品品牌
2017/04/26 全球购物
Vans澳大利亚官网:购买鞋子、服装及配件
2019/09/05 全球购物
Java程序开发中如何应用线程
2016/03/03 面试题
新三好学生主要事迹
2014/01/23 职场文书
2014年三八妇女节活动总结
2014/03/01 职场文书
3.12植树节活动总结2014
2014/03/13 职场文书
幼儿园园长新年寄语2015
2014/12/08 职场文书
2014年机关工会工作总结
2014/12/19 职场文书
唐山大地震观后感
2015/06/05 职场文书
python3 sqlite3限制条件查询的操作
2021/04/07 Python
springboot为异步任务规划自定义线程池的实现
2022/06/14 Java/Android