迭代器跟生成器,与上篇文章讲的装饰器同样,都是属于个人一个老大难问题。

一般就是遇到的时候就去搜一下,结果在一大坨各类介绍博客中看了看,回头又忘记了。

你是否是也是这样呢?python

俗话说:好记性不如烂笔头,虽然如今基本不咋用笔写字了,可是仍是要好好整理下,起码之后我就不用搜了。数据结构

若是如今给你一个列表list_a = [1, 2, 3, 4],让你去迭代它,相信你们都很熟悉,直接用for循环就完事儿,函数

list_a = [1, 2, 3, 4]

for i in list_a:

print(i)

运行测试

1

2

3

4

[Finished in 0.1s]

能够看到,for循环迭代了列表中的每个元素,打印了出来。

那么for循环背后都作了什么事情呢?code

1、 容器、可迭代对象、迭代器

听起来陌生,可是你绝对熟悉的词儿。对象

在python中,一切都是对象,对象的抽象是类,而对象的集合就是容器。内存

使用python中常见的容器有不少,好比:列表list:[0, 1, 2],集合set:([0, 1, 2]),字典dict:{0:0, 1:1, 2:2}以及元组tuple(0, 1, 2)。

这些都是多个元素集中在一块儿的单元,区别的是内部数据结构的实现方法。generator

全部的容器都是能够迭代的,你能够用for循环去迭代上述的容器试试。博客

那把一个个元素找出来,用到的就是迭代器。用iter()能够建立一个迭代器。it

迭代器提供一个next()方法,这个方法你每次调用的时候会给你返回下一个对象,或者StopIteration,也就是没有对象能够给你了。

list_a = [1, 2, 3, 4]

it = iter(list_a) # 建立迭代器

print(next(it)) #调用next()

print(next(it))

print(next(it))

print(next(it))

print(next(it))

运行结果,前4个print能够正常返回,第5个时候就出现StopIteration错误了,由于列表中4个元素已经返回完了。

1

2

3

4

Traceback (most recent call last):

File "D:\练习\demo_iterator.py", line 9, in

print(next(it))

StopIteration

[Finished in 0.1s with exit code 1]

2、生成器

什么是生成器?简单粗暴一点:生成器就是懒人版的迭代器。

在上述的建立迭代器操做中,咱们显然是作了一次性生成的操做,list_a = [1, 2, 3, 4],这4个元素一次性生成好,以供next()调用。

可是生成出的这些元素都是会保存到内存中去,这只是4个元素,若是有上千万、上亿元素呢?

我并非第一时间要用到全部的元素,我只要在我调用next()的时候产生一个返回给我就好,那么这样一次性生成就会白白占用了大量的内存。

生成器应运而生,当调用next()的时候,才会生成下一个变量。

生成器的写法很简单,用小括号,好比把一个列表生成式括起来:(i for i in range(10000)),这样就初始化了一个生成器。

print([i for i in range(10)])

print(i for i in range(10))

上面的时列表,下面的就是一个生成器了,区别就是[]和()。

运行结果:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

at 0x033383A8>

[Finished in 0.1s]

yield关键字

此外,函数也能够成为生成器,秘密就是yield关键字,好比:

def gen():

a = 0

while a < 100:

yield a

a += 1

test = gen()

print(next(test))

print(next(test))

print(next(test))

print(next(test))

运行结果:

0

1

2

3

[Finished in 0.1s]

yield关键字,能够这样理解:当函数运行到这一行的时候,程序会从这里暂停,yield至关于return会返回,

当下次迭代时候,则会从yield的下一行代码开始执行。

因此,我调用了4次print,能够从0开始依次输出。

从我工做中的使用场景出发的话,我在作一些自动化测试的时候,有些变量参数是不能够重复的,用迭代器来定义变量的生成规则,每次

调用都会产生一个新的,就不会重复了。

python迭代器是什么百度百科_【python】迭代器与生成器究竟是什么?看完你就知道...相关推荐

  1. python 兼职多少钱一小时_无印良品兼职一小时多少钱?看完后就清楚了!

    现在像一些比较大的城市商业区都会有无印良品的店面,无印良品作为一家日本品牌,拥有了一些大学生粉丝,不少大学生想通过寒暑假的时间在无印良品找兼职工作.那么,无印良品兼职一小时多少钱?下面就让希财君为大家 ...

  2. python爬取百度百科词条-python简单爬虫爬取百度百科python词条网页

    目标分析: 目标:百度百科python词条相关词条网页 - 标题和简介 入口页:https://baike.baidu.com/item/Python/407313 URL格式: - 词条页面URL: ...

  3. [Python爬虫] Selenium获取百度百科旅游景点的InfoBox消息盒

    前面我讲述过如何通过BeautifulSoup获取维基百科的消息盒,同样可以通过Spider获取网站内容,最近学习了Selenium+Phantomjs后,准备利用它们获取百度百科的旅游景点消息盒(I ...

  4. python 爬取百度知道,Python 爬虫爬取百度百科网站

    利用python写一个爬虫,爬取百度百科的某一个词条下面的全部链接和每一个链接内部的词条主题和摘要.利用request库爬取页面,然后利用BeautifulSoup对爬取到的页面提取url和关键内容. ...

  5. python基础教程pdf百度云-《Python基础教程(第3版)》PDF高清版

    <python基础教程第3版>PDF高清版  百度云资源,内涵教材源代码 百度云链接:百度云盘 提取码:7r7o 编辑推荐 久负盛名的Python入门经典,是非常优秀的基础教程,深入浅出, ...

  6. python中for循环的用法_@Python小白,一文让你掌握Python爬虫

    兴趣 我没事喜欢逛知乎,有一段时间看到了这个问题:利用爬虫技术能做到哪些很酷很有趣很有用的事情: http://t.cn/RptGOPx 觉得回答的一个个炒鸡酷炫 就对爬虫产生了浓厚的兴趣, 于是就开 ...

  7. python爬取快手粉丝榜_[Python] 【原创开源】快手爬虫,根据id批量爬取用户的所有图集和视频...

    分享 写在前面代码功能如题,根据快手用户的id来爬取用户所有公开作品,包括图集和视频. 原理:其实就是利用基于chromium内核的浏览器自带的devtools对所有请求进行排查找出包含作品链接的请求 ...

  8. python怎么读发音百度翻译-基于python实现百度翻译功能

    运行环境: python 3.6.0 今天处于练习的目的,就用 python 写了一个百度翻译,是如何做到的呢,其实呢就是拿到接口,通过这个接口去访问,不过中间确实是出现了点问题,不过都解决掉了 先晾 ...

  9. 伽卡他卡电子教室 百度百科_创建百度百科的好处

    在信息传播如此迅速的当下,如果我们想要了解一个企业,轻松点击鼠标在网络上搜索一下就可以实现.而在搜索的内容中,如果企业有专属的百度百科,那么无疑会让人更加信服.因此企业往往都很重视建立百度百科.其实百 ...

  10. 伽卡他卡电子教室 百度百科_怎么创建人物百度百科?人物百度百科创作技巧...

    百度百科经过长时间的发展后,以及在千万用户经过十年的编辑整理后.百度百科的词条内容日益趋近到完善的程度.在以往几年中,百度百科的内容轻而易举就能够更新上去,现在哪怕是一句话都是难上加难. 那么人物的百 ...

最新文章

  1. infer构建项目失败
  2. 精通JavaScript--07设计模式:行为型
  3. 自考计算机本科学校好,自考本科的难度跟选择的专业有关吗?过来人:有很大的关系...
  4. linux c 用户态 调试追踪函数 调用堆栈 定位段错误
  5. TypeScript 的 generic 函数
  6. 牛客题霸 [矩阵查找] C++题解/答案
  7. 基于同步视频的视野分界线划分算法
  8. ELK采集之nginx 日志高德地图出城市IP分布图
  9. 【Java】Java反射异常处理之InvocationTargetException
  10. java 是怎么跨平台运行的
  11. freeswitch连接postgres数据库
  12. 云桌面计算机被锁定如何解决,桌面布局已锁定怎么解除?电脑桌面便签布局锁定后怎么解除?...
  13. mysql to excel 插件_在Excel中操作MySQL数据库插件MySQL for Excel
  14. 第二模块 商务电子邮件写作技巧
  15. android dropbox目录,通过Android上传文件到Dropbox文件夹
  16. (PTA)数据结构(作业)1、基本概念
  17. Probability and Hypothesis Testing
  18. 5 个 GitHub 项目拿下 Linux
  19. python取数字前n位
  20. C语言经典题目:有5个人坐在一起,问他们分别多少岁?

热门文章

  1. 诚风老师-直销立法十年 直销企业迎来新机遇
  2. 消防信号总线原理_消防总线隔离模块作用及工作原理?
  3. Python 透视表
  4. 客房管理系统C语言——课程设计实习
  5. 二层交换机与三层交换机的区别
  6. Java pdf图书下载网站整理
  7. Unity 模拟投影器(Projector Simulator)
  8. http://msdn.itellyou.cn/
  9. KEPServerEX 6.7.1046.0 新版本功能大全
  10. 2D基本知识入门学习