iteration这个单词,是循环,迭代的意思。也就是说,一次又一次地重复做某件事,叫做
iteration。所以很多语言里面,循环的循环变量叫i,就是因为这个iteration。

iteration指的是循环这个动作本身。而,循环可以做很多事情,一种事情就是便利一个容器里面所有的值
那么遍历这件事情那么长江,就做了一个理论上的抽象:如果我是为了遍历什么东西而循环,那么就称之为
我在一个【迭代器】上循环

iterator,迭代器,就是【循环的那个东西】
单词结尾的or, 指......的人,比如writer,作家,painter,画家

iterate,循环,动词,iteration,循环,名词,iterator,循环的东西,就是迭代器

迭代器有三个操作:判断是不是循环完了,取得当前值,和移动到下一个值。就是C++
里面的for(iterator it = c.begin(); it != c.end(); ++it){ *it=......;}

*it是取得当前值,++it是迭代到下一个值(这里就出现了循环的含义了),而it!=c.end()就是
判断循环是否结束。

所有可以循环的东西,其实只需要支持这三个值,就能直接拿来循环了。因此Python做了包装,
认为一个东西是【可循环】的,就是实现了这三种操作的东西

iterable,iter-able,可循环的。

一个【可循环】的东西,就是可以得到一个【iterator】迭代器的东西。

Python通过调用对象身上的__iter__方法获得一个迭代器,而具备__iter__方法的对象,就被
叫做【可迭代的】,iterable

在Python里,任何实现了__next__方法的对象,都可以被当作迭代器

而任何实现了__iter__方法并返回一个迭代器的对象,都可以放在for...in...这里循环
比如for i in range(100):pass, range返回的对象就实现了__iter__,而range(10).__iter__()返回
的对象就实现了__next__。range(10)的返回值被称为iterable,iterable.__iter__()的返回值被称为
iterator,for i in range(10): pass这个过程叫iterate, 这个动作本身作为一个名词讲,就是iteration。

类比一下,
__iter__就是c.begin()

__next__就是*++it

__next__会抛出一个StopIteration异常,类比于it != c.end()这个行为。

抛StopIteration异常的这个行为和判断it == c.end()这个行为是等价的。

实现了一些一样的行为,就成为了一种类型的东西,这种概念,以后会一直遇到。
C++叫class/template,C#/Java叫interface,Rust/nim叫trait,Python里面没有这个概念,
但是文档里面还是会经常用到。

比如callable,任何可以当函数调用的对象,都是callable的,iterable只是类似的概念罢了。

Python帮助文档中Iteration iterator iterable 的理解的更多相关文章

  1. python统计文档中词频

    python统计文档中词频的小程序 python版本2.7 效果如下: 程序如下,测试文件与完整程序在我的github中 #统计空格数与单词数 本函数只返回了空格数 需要的可以自己返回多个值 def ...

  2. python读入文档中的一行

    从文件log_fusion中读入数据 方法1 f = open("log_fusion.txt") # 返回一个文件对象 line = f.readline() # 调用文件的 r ...

  3. 利用python处理文档中各字段出现的次数并排序

    import string path = 'waldnn' with open(path,'r') as text: words = [raw_word.strip(string.punctuatio ...

  4. 2018-10-04 [日常]用Python读取word文档中的表格并比较

    最近想对某些word文档(docx)的表格内容作比较, 于是找了一下相关工具. 参考Automate the Boring Stuff with Python中的word部分, 试用了python-d ...

  5. 用python从符合一定格式的txt文档中逐行读取数据并按一定规则写入excel(openpyxl支持Excel 2007 .xlsx格式)

    前几天接到一个任务,从gerrit上通过ssh命令获取一些commit相关的数据到文本文档中,随后将这些数据存入Excel中.数据格式如下图所示 观察上图可知,存在文本文档中的数据符合一定的格式,通过 ...

  6. 使用Python中的HTMLParser、cookielib抓取和解析网页、从HTML文档中提取链接、图像、文本、Cookies(二)(转)

    对搜索引擎.文件索引.文档转换.数据检索.站点备份或迁移等应用程序来说,经常用到对网页(即HTML文件)的解析处理.事实上,通过 Python语言提供的各种模块,我们无需借助Web服务器或者Web浏览 ...

  7. 【python】使用HTMLParser、cookielib抓取和解析网页、从HTML文档中提取链接、图像、文本、Cookies

    一.从HTML文档中提取链接 模块HTMLParser,该模块使我们能够根据HTML文档中的标签来简洁.高效地解析HTML文档. 处理HTML文档的时候,我们常常需要从其中提取出所有的链接.使用HTM ...

  8. python、java、ruby、node等如何提取office文档中的内容?

    我相信大家都有过这样的需求,把doc.ppt.excel.pdf.txt中的文本内容提取出来.提取出来的文本内容可用于文档内容的全文索引,文档的基本内容摘要等.在度娘上搜索“如何提取文档内容”,确实有 ...

  9. Python实现读取Excel文档中的配置并下载软件包

    问题:现在遇到这样一个问题,服务器存储了很多软件包,这些包输入不同的产品,每个产品都有自己的配置,互相交叉,那么到底某一产品所有配置的软件包下载后,占用多大空间呢? 分析:从这个问题入手,了解到:软件 ...

随机推荐

  1. React项目(一):markdown编辑器

    在之前的React官网教程中,提到了用Remarkable为插件的markdown评论框.现在就来正儿八经地用另外一个插件marked.js做一个markdown编辑器吧! 准备工作 或许在做之前,应 ...

  2. zabbix监控Java 8080端口

    linux下端口和服务是对应的,Java进程启动时默认监听8080端口,如果服务挂掉则8080端口就没有了. lsof -i:8080 端口,如果没有任何的输出,说明该端口不在工作. 想在zabbix ...

  3. MySQL安装与设置

    下载zip,配置 1,系统变量添加:...\mysql-5.7.10-winx64,环境变量添加:%MYSQL_HOME%\bin 2,修改MySQL.ini basedir=(同系统变量路径) da ...

  4. js ES6 多行字符串 连接字符串

    1. 以前,js多行字符串用\n写起来比较费事,所以最新的ES6标准新增了一种多行字符串的表示方法,用` ... `表示: 旧版写法 alert("你好,\n 我叫\n Olive" ...

  5. XUnit - Shared Context between Tests

    原文 单元测试类通常都会有share setup和cleanup的相关代码.xUnit.net根据共享的范围提供了几种share setup和cleanup的方法. Constructor and D ...

  6. ElasticSearch+ElasticGeo+Geoserver发布ES地理数据

    依赖GeoserverElasticSearchElasticGeo部署部署ElasticGeo使用创建ES数据源并发布发布 依赖 Geoserver 环境搭建参考: ElasticSearch 环境 ...

  7. .Net Framework认知

    在托管代码的世界里,应用程序首先被加载到应用程序域(AppDomain)中,然后将应用程序域加载到进程中,一个进程可以包含多个应用程序域,也就是说一个进程可以包含多个应用程序,毕竟应用程序域之间的切换 ...

  8. flexbox学习

    https://philipwalton.github.io/solved-by-flexbox/ http://www.ruanyifeng.com/blog/2015/07/flex-gramma ...

  9. PHP 验证码生成类(可定制长度和内容)

    ===================VerifyTool====================== <?php class VerifyTool { private $fontPath; / ...

  10. Linq学习笔记四之linq to sql 的基本操作

    首先需要在项目中新增一个 linq  to sql 的服务 新增项,数据,LINQ TO sql 类的这个方法 第二步需要一个model类,用作映射 [Table] public class S_ZD ...