python中的__iter__ __reversed__ __next__
__reversed__ 返回集合的倒叙迭代器,如果没有实现这个方法,reversed()会去使用__getitem__和__len__来实现
介绍__next__和 __iter__方法需要了解下可迭代对象(iterable)和迭代器(iterator):
标准的迭代器都有两个方法__next__和__iter__:
__next__ 返回下一个可用的元素,如果没有元素了,抛出 StopIteration 异常
__iter__ 返回self
什么是可迭代对象:
如果对象实现了__iter__方法,那么对象就是可迭代的。python中的序列都可以迭代。如果没有实现__iter__,实现了__getitem__ 方法,而且参数是从零开始的索引,这种对象也可以迭代。
迭代器和可迭代对象的关系:
python从可迭代对象中获取迭代器(可迭代对象---iter()--->迭代器---next()--->值)
In [9]: a=(1,2,3)In [10]: type(a)Out[10]: tupleIn [11]: b=iter(a)In [12]: type(b)Out[12]: tuple_iterator In [13]: a=[1,2,3] In [14]: type(a) Out[14]: list In [15]: b=iter(a) In [16]: type(b) Out[16]: list_iterator In [20]: while True: ...: try: ...: print(next(b)) ...: except StopIteration: ...: break ...: 1 2 3 也可以使用for来做,上面的异常python已经内部自动处理: In [3]: for i in b: ...: print(i) ...: 1 2 3
例子:定义一个可迭代对象和迭代器
from random import choice class TmptestIterator:def __iter__(self): return self def __next__(self): tmp=choice([i for i in range(10)]) if tmp == 5: raise StopIteration return tmp class TemTest: def __iter__(self): return TmptestIterator()
a=TemTest() print(TmptestIterator,TemTest) for i in a:print (i)<class '__main__.TmptestIterator'> <class '__main__.TemTest'> 6 1 1 2 2 2 1 3
参考:https://docs.python.org/3/library/stdtypes.html#container.__iter__()
转载于:https://www.cnblogs.com/flashBoxer/p/9647875.html
python中的__iter__ __reversed__ __next__相关推荐
- [转载] 【python魔术方法】迭代器(__iter__和__next__)
参考链接: Python __iter __()和__next __()| 将对象转换为迭代器 文章目录 `__iter__` 和 `__next__`真正的迭代器总结 python里面有很多的以__ ...
- python—— __iter__和__next__
python里面有很多的以__(注意:这里是两个下划线)开始和结尾的函数,利用它们可以完成很多复杂的逻辑代码,而且提高了代码的简洁性,下面以迭代器的概念引入相关内容. 迭代器 迭代是Python最强大 ...
- python中标识符下划线用作开头_python python中那些双下划线开头的那些函数都是干啥用用的...
1.写在前面 今天遇到了__slots__,,所以我就想了解下python中那些双下划线开头的那些函数都是干啥用用的,翻到了下面这篇博客,看着很全面,我只了解其中的一部分,还不敢乱下定义. 其实如果足 ...
- 如何在Python中反转列表?
如何在Python中执行以下操作? array = [0, 10, 20, 40] for (i = array.length() - 1; i >= 0; i--) 我需要一个数组的元素,但是 ...
- python中常见的流程结构-【Python2】04、Python程序控制结构
一.python的表达式和语句 1.表达式 "某事", 1个或多个操作数,和0个以上的操作符组成的序列就是表达式 2.语句 "做某事" 程序执行的操作都是语句来 ...
- python中的私有方法_Python: 内置私有方法
################## __new__ ################## @staticmethod __new__(cls [, ...]) 类的构造器,创建某个类的实例,返回值应 ...
- python中的序列类型数据结构元素的切片操作_PythonI/O进阶学习笔记_4.自定义序列类(序列基类继承关系/可切片对象/推导式)...
前言: 本文代码基于python3 Content: 1.python中的序列类分类 2. python序列中abc基类继承关系 3. 由list的extend等方法来看序列类的一些特定方法 4. l ...
- python属性名以两个下划线开头_python python中那些双下划线开头的那些函数都是干啥用用的...
1.写在前面 今天遇到了__slots__,,所以我就想了解下python中那些双下划线开头的那些函数都是干啥用用的,翻到了下面这篇博客,看着很全面,我只了解其中的一部分,还不敢乱下定义. 其实如果足 ...
- python中那些双下划线开头的函数和变量
天下苦秦久矣. 看别人的源码总是被各种下划线带晕了,总算偶得妙文,开疑解惑. 原文预估成文于2015之前,作者不详,传播过程中许多格式不幸丢失. 本人不忍佳篇失传,斗胆稍加修缮,增补格式,希望不损原意 ...
最新文章
- Azure手把手系列 2:微软中国云服务介绍
- html5 去掉 li的样式,css li 去掉点的样式写法
- 数据结构——队列(queue)
- 路飞学城Python-Day46
- Java 运行时数据区域
- 深入解析QML引擎, 第4部分: 自定义解析器
- MySQL 基本查询、条件查询、投影查询
- 关于NSIS脚本的Demo
- Mybatis的xml配置实例
- 全国职称计算机考试教程,全国职称计算机考试专用教程:Excel 2003 中文电子表格(附光盘)...
- 管家婆服务器端口修改,211端口被占用,如何设置
- oracle arm版本,Oracle版本区别
- java基础—输入/输出
- 淮安市第八届计算机比赛,淮安市科学技术协会
- 物联网-移远m26使用MQTT协议,AT指令对接阿里云
- pdf 改变页面大小 python_用Python开发PDF编辑器,实现PDF页面提取,页面合并与替换...
- 拉钩网前端项目实战04
- 每周一本书之《Python大战机器学习:数据科学家的第一个小目标》
- Differentiable Scaffolding Tree for Molecule Optimization(论文解读)
- php 微信转发朋友圈,php实现的微信分享到朋友圈并记录分享次数功能的讲解
热门文章
- linux修改文件夹名称_1.3.2 对 Hello Word! 程序代码进行编辑修改
- ECharts的点击事件
- 内网网段范围_局域网中多网段的划分
- js读取div从html中导入,在html中div+css布局的简单应用...-js+div+css下拉导航菜单完整代...-CSS文件的条件导入 - Gene Li_169IT.COM...
- vue路由跳转权限_vue权限路由实现方式总结
- jQuery在同级节点中查找
- python的函数结构_Python学习(四)常见函数及控制结构
- 内网集群 无法通信_记一次集群内无可用http服务问题排查
- java中实现选择文件_Java实现选择文件并显示文件内容代码
- 花体英文字帖pdf可打印_考研政治 | 马原24个主观题答题原理!PDF可打印!