__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__相关推荐

  1. [转载] 【python魔术方法】迭代器(__iter__和__next__)

    参考链接: Python __iter __()和__next __()| 将对象转换为迭代器 文章目录 `__iter__` 和 `__next__`真正的迭代器总结 python里面有很多的以__ ...

  2. python—— __iter__和__next__

    python里面有很多的以__(注意:这里是两个下划线)开始和结尾的函数,利用它们可以完成很多复杂的逻辑代码,而且提高了代码的简洁性,下面以迭代器的概念引入相关内容. 迭代器 迭代是Python最强大 ...

  3. python中标识符下划线用作开头_python python中那些双下划线开头的那些函数都是干啥用用的...

    1.写在前面 今天遇到了__slots__,,所以我就想了解下python中那些双下划线开头的那些函数都是干啥用用的,翻到了下面这篇博客,看着很全面,我只了解其中的一部分,还不敢乱下定义. 其实如果足 ...

  4. 如何在Python中反转列表?

    如何在Python中执行以下操作? array = [0, 10, 20, 40] for (i = array.length() - 1; i >= 0; i--) 我需要一个数组的元素,但是 ...

  5. python中常见的流程结构-【Python2】04、Python程序控制结构

    一.python的表达式和语句 1.表达式 "某事", 1个或多个操作数,和0个以上的操作符组成的序列就是表达式 2.语句 "做某事" 程序执行的操作都是语句来 ...

  6. python中的私有方法_Python: 内置私有方法

    ################## __new__ ################## @staticmethod __new__(cls [, ...]) 类的构造器,创建某个类的实例,返回值应 ...

  7. python中的序列类型数据结构元素的切片操作_PythonI/O进阶学习笔记_4.自定义序列类(序列基类继承关系/可切片对象/推导式)...

    前言: 本文代码基于python3 Content: 1.python中的序列类分类 2. python序列中abc基类继承关系 3. 由list的extend等方法来看序列类的一些特定方法 4. l ...

  8. python属性名以两个下划线开头_python python中那些双下划线开头的那些函数都是干啥用用的...

    1.写在前面 今天遇到了__slots__,,所以我就想了解下python中那些双下划线开头的那些函数都是干啥用用的,翻到了下面这篇博客,看着很全面,我只了解其中的一部分,还不敢乱下定义. 其实如果足 ...

  9. python中那些双下划线开头的函数和变量

    天下苦秦久矣. 看别人的源码总是被各种下划线带晕了,总算偶得妙文,开疑解惑. 原文预估成文于2015之前,作者不详,传播过程中许多格式不幸丢失. 本人不忍佳篇失传,斗胆稍加修缮,增补格式,希望不损原意 ...

最新文章

  1. Azure手把手系列 2:微软中国云服务介绍
  2. html5 去掉 li的样式,css li 去掉点的样式写法
  3. 数据结构——队列(queue)
  4. 路飞学城Python-Day46
  5. Java 运行时数据区域
  6. 深入解析QML引擎, 第4部分: 自定义解析器
  7. MySQL 基本查询、条件查询、投影查询
  8. 关于NSIS脚本的Demo
  9. Mybatis的xml配置实例
  10. 全国职称计算机考试教程,全国职称计算机考试专用教程:Excel 2003 中文电子表格(附光盘)...
  11. 管家婆服务器端口修改,211端口被占用,如何设置
  12. oracle arm版本,Oracle版本区别
  13. java基础—输入/输出
  14. 淮安市第八届计算机比赛,淮安市科学技术协会
  15. 物联网-移远m26使用MQTT协议,AT指令对接阿里云
  16. pdf 改变页面大小 python_用Python开发PDF编辑器,实现PDF页面提取,页面合并与替换...
  17. 拉钩网前端项目实战04
  18. 每周一本书之《Python大战机器学习:数据科学家的第一个小目标》
  19. Differentiable Scaffolding Tree for Molecule Optimization(论文解读)
  20. php 微信转发朋友圈,php实现的微信分享到朋友圈并记录分享次数功能的讲解

热门文章

  1. linux修改文件夹名称_1.3.2 对 Hello Word! 程序代码进行编辑修改
  2. ECharts的点击事件
  3. 内网网段范围_局域网中多网段的划分
  4. js读取div从html中导入,在html中div+css布局的简单应用...-js+div+css下拉导航菜单完整代...-CSS文件的条件导入 - Gene Li_169IT.COM...
  5. vue路由跳转权限_vue权限路由实现方式总结
  6. jQuery在同级节点中查找
  7. python的函数结构_Python学习(四)常见函数及控制结构
  8. 内网集群 无法通信_记一次集群内无可用http服务问题排查
  9. java中实现选择文件_Java实现选择文件并显示文件内容代码
  10. 花体英文字帖pdf可打印_考研政治 | 马原24个主观题答题原理!PDF可打印!