第一种:__iter__

实现__iter__的对象,是可迭代对象。__iter__方法可以直接封装一个迭代器,从而实现for循环

class A:
def __init__(self):
self.lis = [1,2,3,4]
def __iter__(self):
for i in self.lis:
yield i a = A()
for i in a:
print(i)

第二种:__iter__ 和 __next__

利用__iter__返回自己,会进一步调用__next__方法,注意__next__方法要有raise StopIteration 的终止条件

class B:
def __init__(self):
self.lis = [1,2,3,4]
self.c = -1
def __iter__(self):
return self
def __next__(self):
if self.c < self.lis.__len__()-1:
self.c+=1
return self.lis[self.c]
else:
raise StopIteration # 一定有终止

第三种:__getitems__

for statement的另一个机制是角标索引,所以利用__getitems__方法同样可以实现

class C:
def __init__(self):
self.a = [1,2,3,4]
def __getitem__(self, item):
return self.a[item] c = C()
for i in c:
print(i)

python对象的for迭代实现的更多相关文章

  1. Python迭代器,可迭代对象,生成器

    迭代器 迭代器(iterator)有时又称游标(cursor)是程式设计的软件设计模式,可在容器物件(container,例如链表或阵列)上遍访的界面,设计人员无需关心容器物件的内存分配的实现细节. ...

  2. Python中的可迭代对象与迭代器对象

    刚刚学习Python,对“可迭代对象”和"迭代器对象"的个人理解,不知道对不对. 1.几个概念 (1)迭代工具:包括for循环.列表解析.in成员关系测试.....等等在内的,用于 ...

  3. python当中的 可迭代对象 迭代器

    学习python有一段时间了,在学习过程中遇到很多难理解的东西,做一下总结,希望能对其他朋友有一些帮助. 完全是个人理解,难免有错,欢迎其他大神朋友们批评指正. 1 迭代 什么是迭代呢??我们可以这样 ...

  4. 【Python】【容器 | 迭代对象 | 迭代器 | 生成器 | 生成器表达式 | 协程 | 期物 | 任务】

    Python 的 asyncio 类似于 C++ 的 Boost.Asio. 所谓「异步 IO」,就是你发起一个 IO 操作,却不用等它结束,你可以继续做其他事情,当它结束时,你会得到通知. Asyn ...

  5. Python:容器、迭代对象、迭代器、生成器及yield关键字

            在了解Python的数据结构时,容器(container).可迭代对象(iterable).迭代器(iterator).生成器(generator).列表/集合/字典推导式(list, ...

  6. 流畅的python 14章可迭代的对象、迭代器 和生成器

    可迭代的对象.迭代器和生成器 迭代是数据处理的基石.扫描内存中放不下的数据集时,我们要找到一种惰性获取数据项的方式,即按需一次获取一个数据项.这就是迭代器模式(Iterator pattern). 迭 ...

  7. Python中的可迭代对象

      Python中的可迭代对象有:列表.元组.字典.字符串:常结合for循环使用: 判断一个对象是不是可迭代对象: from collections import Iterable isinstanc ...

  8. Python中的可迭代对象/迭代器/For循环工作机制/生成器

    本文分成6个部分: 1.iterable iterator区别 2.iterable的工作机制 3.iterator的工作机制 4.for循环的工作机制 5.generator的原理 6.总结 1.i ...

  9. 【转】Python中自定义可迭代对象

    python 中内置的可迭代的对象有 list.tuple.set.dict 等,那么我们自己怎么定义一个可迭代的对象呢?先来段代码吧 import re import reprlib RE_WORD ...

随机推荐

  1. Flash AS3)actionScript代码制作文字渐变 + 描边

    var sp:Sprite = new Sprite; //容器,放置稍后的渐变背景和文本框 this.addChild(sp); //容器添加到舞台 var maskMC:MovieClip = n ...

  2. vue2.0的初始化

    vue2.0的初始化,使用 webpack构建工具生成的项目 直接上代码 main.js文件 // The Vue build version to load with the `import` co ...

  3. 【转】图解CSS padding、margin、border属性

    http://www.cnblogs.com/linjiqin/p/3556497.html 图解CSS padding.margin.border属性W3C组织建议把所有网页上的对像都放在一个盒(b ...

  4. 使用unity开发游戏时如觉得游戏声音太吵,点Mute Audio

    mute静音

  5. checkpoint NGFW VM安装

    step1:在VMworkstation中创建虚拟机向导,选择Linux 2.6内核 64位如下图: 虚拟机的配置建议如下: RAM:至少8GB Disk:120G CPU:四核 step2:使用IO ...

  6. 20175126《Java程序设计》第七周学习总结

    # 20175126 2016-2017-2 <Java程序设计>第七周学习总结 ## 教材学习内容总结 - 本周学习方式主要为手动敲代码并理解内容学习. - 学习内容为教材第八章,本章主 ...

  7. dwr去除默认错误弹窗

    在开发中,我实在不希望dwr弹出alter,只需要打印错误日志就可以,客户端不需要alert出error或者a server error has occurred. 这样的提示,更不需要alert出堆 ...

  8. vue调试方法

    vue调试方法有如下三种 1.chrome谷歌插件vue-devtools 2.console.log().console.error().alert().debugger 3.设置全局变量,分为两种 ...

  9. ios 11 SDK 新特性 使用

    Xcode 9虽然已经出了一段时间,但考虑到一些第三方库的适配,就没有升级.现在有时间了就升级到 Xcode 9,随便学习一下新的小技巧.感觉很好用哦~ 一.Named Color 关于更换主题的一个 ...

  10. Linux 学习笔记 2:文件系统

    1.文件系统层次结构 系统目录内容: /: 根目录(之后的/都是目录分隔符) /home:用户目录 /bin: Unix常用命令,如bash, date, cat, tar等 /sbin: 管理员命令 ...