python协程初步---一个迭代器的实现
一般认为迭代器就是实现了两个方法__iter__和__next__
- 先创建这样一个类
from collections import Iterable
from collections import Iterator class classiterable(object):
def __iter__(self):
pass
def __next__(self):
pass class mycoach(object):
def __init__(self):
pass
def addname(self):
pass
def __iter__(self):
return classiterable()
cpc = mycoach() print("类对象可以被迭代" if isinstance(cpc,Iterable) else "无法被迭代")
输出结果:
类对象可以被迭代
通过在mycoach类的方法__iter__中返回classiterable实现了mycoach和classiterable类之间的联系
- 实现classiterator访问mycoach类中的属性
from collections import Iterable
from collections import Iterator class classiterable(object):
def __init__(self,obj):
self.obj = obj
self.count = #添加一个计数器,确保按顺序遍历数组 def __iter__(self):
pass
def __next__(self):
#防止迭代过头
if self.count<len(self.obj.coachname):
ret = self.obj.coachname[self.count]
self.count+=
return ret
else:
raise StopIteration class mycoach(object):
def __init__(self):
self.coachname=[]
def addname(self,name):
self.coachname.append(name)
def __iter__(self):
return classiterable(self)
cpc = mycoach()
cpc.addname('陈培昌')
cpc.addname('程劲')
cpc.addname('徐晓冬')
for i in cpc:
print(i)
print("类对象可以被迭代" if isinstance(cpc,Iterable) else "无法被迭代")
输出结果:
陈培昌
程劲
徐晓冬
类对象可以被迭代
- 完全进化版本---mycoach内部实现__next__魔术方法
class mycoach(object):
def __init__(self):
self.coachname=[]
self.count=
def addname(self,name):
self.coachname.append(name)
def __iter__(self):
return self
def __next__(self):
if self.count<len(self.coachname):
ret = self.coachname[self.count]
self.count+=
return ret
else:
raise StopIteration cpc = mycoach()
cpc.addname('陈培昌')
cpc.addname('程劲')
cpc.addname('徐晓冬')
for i in cpc:
print(i)
print("类对象可以被迭代" if isinstance(cpc,Iterable) else "无法被迭代")
输出结果:
陈培昌
程劲
徐晓冬
类对象可以被迭代
- 斐伯纳契数列
class mywenwa(object):
def __init__(self,num):
self.a,self.b=,
self.count=
self.times=num
def __iter__(self):
return self
def __next__(self):
if self.count <self.times:
self.a,self.b = self.a+self.b,self.a
ret = self.b
return ret
else:
raise StopIteration
saiwa = mywenwa()
print(next(saiwa))
print(next(saiwa))
print(next(saiwa))
print(next(saiwa))
print(next(saiwa))
print(next(saiwa))
print(next(saiwa))
print(next(saiwa))
print(next(saiwa))
.......
输出结果:
python协程初步---一个迭代器的实现的更多相关文章
- python协程初步---一个生成器的实现
和列表那种一下占据长度为n的内存空间不同的是,生成器在调用的过程中逐步占据内存空间,因此有着很大的优势 一个斐波纳契数列的例子 def myfibbo(num): a,b=, count= while ...
- python协程初步--gevent库使用以及解释什么是猴子补丁monkey_patch
协程工作的特点是遇到阻塞或耗时的任务时就切换,协程的生存依赖于线程,线程依赖于进程 一个似乎有点问题的例子 import gevent,time def kisscpc(num): for i in ...
- 关于python协程的一个例子的学习
例子来自https://blog.tonyseek.com/post/event-manage-with-greenlet/ 加了一些注释看懂了: 注释中的数字表示执行的顺序,这个简单的例子用到了py ...
- Python 协程总结
Python 协程总结 理解 协程,又称为微线程,看上去像是子程序,但是它和子程序又不太一样,它在执行的过程中,可以在中断当前的子程序后去执行别的子程序,再返回来执行之前的子程序,但是它的相关信息还是 ...
- 从yield 到yield from再到python协程
yield 关键字 def fib(): a, b = 0, 1 while 1: yield b a, b = b, a+b yield 是在:PEP 255 -- Simple Generator ...
- [转载] Python协程从零开始到放弃
Python协程从零开始到放弃 Web安全 作者:美丽联合安全MLSRC 2017-10-09 3,973 Author: lightless@Meili-inc Date: 2017100 ...
- Python协程详解(二)
上一章,我们介绍了Python的协程,并讲到用yield达到协程的效果,这一章,我们来介绍yield from的结构和作用 我们先来对比下yield和yield from的用法 def first_g ...
- python协程详解
目录 python协程详解 一.什么是协程 二.了解协程的过程 1.yield工作原理 2.预激协程的装饰器 3.终止协程和异常处理 4.让协程返回值 5.yield from的使用 6.yield ...
- Python协程与Go协程的区别二
写在前面 世界是复杂的,每一种思想都是为了解决某些现实问题而简化成的模型,想解决就得先面对,面对就需要选择角度,角度决定了模型的质量, 喜欢此UP主汤质看本质的哲学科普,其中简洁又不失细节的介绍了人类 ...
随机推荐
- centos7配置hadoop
hadoop压缩包下载: 链接:https://pan.baidu.com/s/1dz0Hh75VNKEebcYcbN-4Hw 提取码:g2e3 java压缩包下载: 链接:https://pan.b ...
- Linux(CentOS 7)下安装postgres
事情背景:需要在Linux上安装postgres数据库,但安装目录想直接指定,所以想通过源码编译安装pg 首先下载源码安装包.源码下载地址:https://github.com/postgres/po ...
- Visual Studio中Debug与Release以及x86、x64、Any CPU的区别
Visual Studio中Debug与Release的区别: 在Visual Studio中,编译模式有2种:Debug与Release.这也是默认的两种方式,在新建一个project的时候,就已经 ...
- lubuntu踩坑全记录
为了降低系统占用,毕业之后一直用lubuntu不用ubuntu...操作其实差不多,就是lubuntu有一些小坑坑:P 本文是我的踩坑全记录.长期更新. 调分辨率 升级命令lubuntu不出登录页面 ...
- Word 查找替换高级玩法系列之 -- 替换手机号中间几位数字
1.打开"查找和替换"对话框.切换到"开始"选项卡,在"编辑"组中选择"替换".或者按下快捷键"Ctrl+H& ...
- 剑指offer58:对称的二叉树。判断一颗二叉树是不是对称的,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的
1 题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. 2 思路和方法 定义一种遍历算法,先遍历右子结点再遍历左子结点:如对称先序 ...
- 剑指Offer(4)——替换空格
题目: 请实现一个函数,把字符串中的每个空格替换成"%20".例如输入“We are happy.”,则输出“We%20are%20happy.”. 思路: 如果按照顺序从前往后依 ...
- 通过DBCC Page查看在SQL Server中哪行数据被锁住了?
原文:通过DBCC Page查看在SQL Server中哪行数据被锁住了? 如何查看被锁的是哪行数据?通过dbcc page可以. 要想明白这个问题: 首先,需要模拟阻塞问题,这里直接模拟了阻塞问题的 ...
- ASE19团队项目 beta阶段 model组 scrum7 记录
本次会议于12月10日,19时30分在微软北京西二号楼sky garden召开,持续10分钟. 与会人员:Jiyan He, Lei Chai, Linfeng Qi, Xueqing Wu, Kun ...
- Ceph 调整crush map
目录 Ceph 调整crush map 1.前言 2.示例 1.创建新的replicated 2.修改当前pool的rule Ceph 调整crush map 1.前言 本文章适用于ceph n版 2 ...