python 使用cycle构造无限循环迭代器

一、引入方式

from itertools import cycle

二、使用方法

我们先来看看它的源码

cycle它接收一个可迭代对象,可以将一个可迭代对象转换为一个可以无限迭代的迭代器

源码里我们可以看到它实现了__iter__和__next__的魔术方法,说明它既是可迭代对象也是一个迭代器,我们可以使用for循环和next()方法去操作它

我们先来看看以普通的方式去遍历一个列表

li = ['python', 'java', 'c', 'ruby', 'php', 'javascript']
for i in li:
  print(i)

打印结果:

可以看到,遍历直到最后一个元素取完后就不再遍历了

接下来我们使用cycle来创建一个无限迭代的迭代器

from itertools import cycle

li = ['python', 'java', 'c', 'ruby', 'php', 'javascript']
cycle_iter = cycle(li)
for i in cycle_iter:
  print(i)

打印结果:

......

我们可以发现当遍历到最后一个元素结束后又会回到第一个元素,就这样无限循环下去形成了死循环,跟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))

打印结果:

我们发现当最后一个元素迭代完后,又继续迭代第一个元素,这跟普通的迭代器不一样,普通的迭代器最后一个元素迭代完后继续迭代,会抛出迭代停止的异常

三、应用场景
准备一批数据需要循环使用,并且需要一定的顺序,并不希望随机选取一个使用,这时cycle就起到了很好的作用,以我工作中为例,需要针对某知名网站爬取数据时,网站对你的请求频率做了限制,而你又需要更高效的获取这些数据,就可以使用cookie池,在循环发起请求时,就可以用next()方法按顺序去迭代获取cookie池中的数据用来发送请求,迭代完最后一个cookie后,又会回到第一个cookie,这样一来,当账号比较多时,每个账号使用到的频率时间就不会太大,也就达到了预期效果,部分代码截图示例:

温馨提示:爬虫一定要遵守网络相关法律,切不要存侥幸心理去触碰法律的底线,遵守被爬取对象的安全要求,不要暴力爬取,不要爬取涉及到安全和隐私的相关信息!

以上就是python 使用cycle构造无限循环迭代器的详细内容,更多关于python 构造无限循环迭代器的资料请关注我们其它相关文章!

(0)

相关推荐

  • Python通过for循环理解迭代器和生成器实例详解

    本文实例讲述了Python通过for循环理解迭代器和生成器.分享给大家供大家参考,具体如下: 迭代器 可迭代对象 通过 for-in- 循环依次拿到数据进行使用的过程称为遍历,也叫迭代.我们把可以通过 for-in- 语句迭代读取数据的对象称之为可迭代对象. - 通过 isinstance()可以判断一个对象是否可以迭代 # 判断列表 print(isinstance([], Iterable) 打印结果为 True 即为可迭代对象. - 自定义一个能容纳数据的类,测试该类的可迭代性 impor

  • 浅谈Python中的可迭代对象、迭代器、For循环工作机制、生成器

    1.iterable iterator区别 要了解两者区别,先要了解一下迭代器协议: 迭代器协议是指:对象需要提供__next__()方法,它返回迭代中的元素,在没有更多元素后,抛出StopIteration异常,终止迭代. 可迭代对象就是:实现了迭代器协议的对象. 协议是一种约定,可迭代对象实现迭代器协议,Python的内置工具(如for循环,sum,min,max函数等)通过迭代器协议访问对象,因此,for循环并不需要知道对象具体是什么,只需要知道对象能够实现迭代器协议即可. 迭代器(ite

  • Python迭代器协议及for循环工作机制详解

    一.递归与迭代 二.什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个stopiteration异常,已终止迭代(只能往后走不能往前退) 2.可迭代对象:实现了迭代器协议的对象(如何实现:对象内部定义一个__iter__()方法) 3.协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具(如for循环,sum,min,max函数等)使用迭代器协议访问对象. 三.python中强大的for循环机制 for循环的本质:循

  • 实例讲解Python 迭代器与生成器

    迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退. 迭代器有两个基本的方法:iter() 和 next(). 字符串,列表或元组对象都可用于创建迭代器: >>> list=[1,2,3,4] >>> it = iter(list) # 创建迭代器对象 >>> print (next(it)) # 输出迭

  • 五分钟带你搞懂python 迭代器与生成器

    前言 大家周末好,今天给大家带来的是Python当中生成器和迭代器的使用. 我当初第一次学到迭代器和生成器的时候,并没有太在意,只是觉得这是一种新的获取数据的方法.对于获取数据的方法而言,我们会一种就足够了.但是在我后来Python的使用以及TensorFlow等学习使用当中,我发现很多地方都用到了迭代器和生成器,或者是直接使用,或者是借鉴了思路.今天就让我们仔细来看看,它们到底是怎么回事. 迭代器 我们先从迭代器开始入手,迭代器并不是Python独有的概念,在C++和Java当中都有itera

  • python 生成器和迭代器的原理解析

    一.生成器简介 在python中,生成器是根据某种算法边循环边计算的一种机制.主要就是用于操作大量数据的时候,一般我们会将操作的数据读入内存中处理,可以计算机的内存是比较宝贵的资源,我认为的当要处理的数据超过内存四分之一的大小时就应该使用生成器. 二.生成器有什么特点? 1.和传统的容器相比,生成器更节省内存. 2.延迟计算,在我们需要结果时就调用一下生成器的next()方法即可. 3.可迭代,你可以像遍历list一样,遍历生成器 三.如何创建生成器? 在python中有两种方式创建生成器:生成

  • python 使用cycle构造无限循环迭代器

    一.引入方式 from itertools import cycle 二.使用方法 我们先来看看它的源码 cycle它接收一个可迭代对象,可以将一个可迭代对象转换为一个可以无限迭代的迭代器 源码里我们可以看到它实现了__iter__和__next__的魔术方法,说明它既是可迭代对象也是一个迭代器,我们可以使用for循环和next()方法去操作它 我们先来看看以普通的方式去遍历一个列表 li = ['python', 'java', 'c', 'ruby', 'php', 'javascript'

  • Python中无限循环需要什么条件

    无限循环 如果条件判断语句永远为 true,循环将会无限的执行下去. 如下实例 #!/usr/bin/python # -*- coding: UTF-8 -*- var = 1 while var == 1 : # 该条件永远为true,循环将无限执行下去 num = raw_input("Enter a number :") print "You entered: ", num print "Good bye!" 以上实例输出结果: Ente

  • Python趣味入门教程之循环语句while

    前言 任何语言都有循环语句,在Python里循环更是变化无穷,有基本的循环,有循环else语句,引伸出来的还有迭代器.推导式,咱们先学习最简单的一种. While循环  while 条件判断语句: 子代码1 子代码2 子代码3 - 子代码N 主代码1 while语句的格式与if类似,子代码必须进行缩进4个空格,作用却是大不相同.当它执行第一次循环时,判断条件是否成立,如果条件成立,就从子代码1开始执行到子代码N,然后程序会回到while语句再次判断条件是否成立,如果成立就继续从子代码1开始执行,

  • 稳扎稳打学Python之容器 可迭代对象 迭代器 生成器专题讲解

    目录 一.容器 1.什么是容器? 二.可迭代对象 1.什么是可迭代对象? 三.迭代器 四.序列 五.列表推导式 六.生成器 1.生成器的第一种创建方法:生成器表达式 2.生成器的第二种创建方法:yield 七.小结 今天就来给大家讲讲Python中的容器.可迭代对象.迭代器和生成器这些难理解的概念,让你的Python基础更上一层楼! 一.容器 1.什么是容器? 在Python中,容器是把多种元素组织在一起的数据结构,容器中的元素就可以逐个迭代获取.说白了,它的作用就像它的名字一样:用来存放东西(

  • 一篇文章彻底搞懂Python中可迭代(Iterable)、迭代器(Iterator)与生成器(Generator)的概念

    前言 在Python中可迭代(Iterable).迭代器(Iterator)和生成器(Generator)这几个概念是经常用到的,初学时对这几个概念也是经常混淆,现在是时候把这几个概念搞清楚了. 0x00 可迭代(Iterable) 简单的说,一个对象(在Python里面一切都是对象)只要实现了只要实现了__iter__()方法,那么用isinstance()函数检查就是Iterable对象: 例如 class IterObj: def __iter__(self): # 这里简单地返回自身 #

  • python基础教程之while循环

    前言 今天来说下python中的循环.循环的意思是什么,以环形.回路或轨道运行;沿曲折的路线运行;特指运行一周而回到原处.这是百度给出的循环的意思.在python中,就是重复执行你给的指令,直至结束.我们现在看下,在python中,循环就是:while:它有它的规则结构,就是while + 条件(冒号,这个别忘记了.): 意思是,当条件不成立时,不循环.举个例子说明一下: 我们先来说下这个例子的意思,首先,while+条件: 这个已经带入到了代码中,这个代码的意思是当循环10次1的时候 ,跳出循

  • Python学习笔记之While循环用法分析

    本文实例讲述了Python学习笔记之While循环用法.分享给大家供大家参考,具体如下: 前面一篇<Python学习笔记之For循环用法>详细介绍了Python for循环,这里再来讲述一下while循环的使用方法: Python 中的While循环 For 循环是一种有限迭代,意味着循环主体将运行预定义的次数.这与无限迭代循环不同,无限迭代循环是指循环重复未知次数,并在满足某个条件时结束,while 循环正是这种情况.下面是一个 while 循环的示例: card_deck = [4, 11

  • Python学习笔记之For循环用法详解

    本文实例讲述了Python学习笔记之For循环用法.分享给大家供大家参考,具体如下: Python 中的For循环 Python 有两种类型的循环:for 循环和 while 循环.for 循环用来遍历可迭代对象. 可迭代对象是每次可以返回其中一个元素的对象, 包括字符串.列表和元组等序列类型,以及字典和文件等非序列类型.还可以使用迭代器和生成器定义可迭代对象 For 循环示例: # iterable of cities cities = ['new york city', 'mountain

  • python列表删除和多重循环退出原理详解

    在学习python的时候,会有一些梗非常不适应,在此列举列表删除和多重循环退出的例子: 列表删除里面的坑 比如我们有一个列表里面有很多相同的值,假如:nums=[1,6,6,3,6,2,10,2,100],我想去掉6,可以这样写: nums=[1,6,6,3,6,2,10,2,100] for n in nums: if n==6: nums.remove(n) nums.sort() print(nums)#输出结果:[1, 2, 2, 3, 6, 10, 100] 排序显示后列表中还有一个6

  • Python 中的判断语句,循环语句,函数

    目录 1. 判断语句 1.1 布尔类型和比较运算符 1.1.1 布尔类型 1.1.2 比较运算符 1.2 if 语句 1.2.1 if 语句基本格式 1.2.2 if else 语句 1.2.3 if elif else 语句 1.2.4 判断语句的嵌套 2. 循环语句 2.1 while 循环 2.1.1 while 循环基础语法 2.1.2 while 循环嵌套使用 2.2 for 循环 2.2.1 for 循环基础语法 2.2.2 range 语句 2.2.3 变量作用域 2.2.4 fo

随机推荐