一、协程

1、协程是Python语言独有的一种多任务方式。

2、使用gevent模块实现协程。

3、协程的实现过程(步骤)

迭代器

生成器

yield

greenlet

gevent

二、迭代器

1、迭代的定义: 在原有的基础之上添加新的功能。

2、迭代对象的定义:即一个对象中有包含了【__iter__】的方法。

3、迭代器的定义:

即:一个对象中既包含了【__iter__】方法,又包含了【__next__】方法

通过它可以用来节省内存空间,并且能够知道将来生成数据的方式。

4、判断一个数据类型是否可以迭代:

说明:

a、通过【isinstance】语句用于判断一个对象是否由一个类创建的。

返回一个布尔值:是则返回True,不是则返回False。

语法:

isinstance(对象, 类)

# True:属于

# False:不属于

b、判断这个数据类型对象是否是属于【Iterable】类的子类。

语法:

from collections import Iterable

isinstance(迭代对象, Iterable)

# True:属于

# False:不属于

c、示例

from collections importIterable#1. 判断列表

list_ret = isinstance([1, 2, 3], Iterable)print(f"列表:{list_ret}")#2. 判断元组

list_ret = isinstance((1, 2, 3), Iterable)print(f"元组:{list_ret}")#3. 判断字符串

list_ret = isinstance("huangwei", Iterable)print(f"字符串:{list_ret}")#4. 判断数字

list_ret = isinstance(100, Iterable)print(f"数字:{list_ret}")

View Code

运行结果:

列表:True

元组:True

字符串:True

数字:False

4、可迭代对象

a、成为可迭代对象的条件:类中必须要有【__iter__】方法。

要求:自定义一个可迭代对象

from collections importIterableclassDemo(object):def __init__(self):

self.names=list()defadd(self, name):

self.names.append(name)

obj=Demo()

obj.add(100)

obj.add(200)

obj.add(300)print(f"判断obj对象是否为可迭代对象:{isinstance(classmate, Iterable)}")

View Code

运行结果:判断obj对象是否为可迭代对象:False

可迭代对象示例代码

from collections importIterableclassDemo(object):def __init__(self):

self.names=list()defadd(self, name):

self.names.append(name)def __iter__(self):passobj=Demo()

obj.add(100)

obj.add(200)

obj.add(300)print(f"判断obj对象是否为可迭代对象:{isinstance(classmate, Iterable)}")

View Code

运行结果:判断obj对象是否为可迭代对象:True

5、使用for循环的条件

a、判断一个对象可以使用for循环的条件

b、for循环的执行原理:

1、被循环的对象是否可以迭代,即:类中必须有【__iter__】方法

2、在【__iter__】方法中必须要返回一个引用:迭代器。

即:该迭代器中必须具有【__iter__方法】和【__next__方法】。

3、迭代器中必须包含【__iter__】方法和【__next__】方法。

4、通过这个迭代器的引用,for循环将调用该引用中的【__next__】的返回值。

即:使用【for 变量 in 可迭代对象】语句时,

打印变量的值得到的是迭代器中【__next__】方法的返回值。

c 、演示:

示例1:创建一个可以被for循环遍历的类。

classDemo(object):def __init__(self):

self.names=list()defadd(self, name):

self.names.append(name)def __iter__(self):return ClassIterator() #返回一个迭代器

classClassIterator(object):def __iter__(self):pass

def __next__(self):passobj=Demo()#通过iter函数可查看obj对象的__iter__方法的返回值。

print(iter(obj))

View Code

运行结果:

示例2:查看一个对象是否为迭代器,并通过【next】方法取到可迭代对象中的值。

运行结果:

from collections importIteratorclassDemo(object):def __init__(self):

self.names=list()defadd(self, name):

self.names.append(name)def __iter__(self):returnClassIterator()classClassIterator(object):def __iter__(self):pass

def __next__(self):return 100obj=Demo()

demo_iterator=iter(obj)#1. 判断obj对象是否为可迭代对象

print(f"obj对象是否为可迭代对象:{isinstance(demo_iterator, Iterable)}")#2. 判断demo_iterator对象是否为迭代器

print(f"demo_iterator对象是否为迭代器:{isinstance(demo_iterator, Iterator)}")#3. 通过next方法取值

print(next(demo_iterator))

View Code

mysql迭代器_迭代器 - 御姐玫瑰 - 博客园相关推荐

  1. mysql链表_MySql链表语句--博客园老牛大讲堂

    为什么链表?--博客园老牛大讲堂 因为表与表之间有关系,而且查询时需要两张表的某些数据. 链表的前提是:表与表之间必须设置主外键吗? 不是的,其实表与表之间不需要设置主外键关系,用数据库语句就可以实现 ...

  2. java单纯形法_单纯形法 - fjzzq2002 - 博客园

    看了集训队答辩,感觉要学习的有杜教筛高级版.线性规划.FFT.仙人掌.高级版线段树 不出意外的话一个月内博客内都不会有别的东西了QAQ 首先是喜闻乐见的单纯形法解线性规划. 今年(2016年)和线性规 ...

  3. java充值_充值 - javalzy - 博客园

    http://blog.csdn.net/xiaoxiangzhu660810/article/details/17434907 http://blog.csdn.net/fangzy0112/art ...

  4. mysql可以做决策树吗_决策树 - stream886 - 博客园

    参考资料 决策树 决策树是一种运用概率与图论中的树对决策中的不同方案进行比较,从而获得最优方案的风险型决策方法. 决策树学习三步骤: 特征选择 决策树的生成 决策树的剪枝 常用的决策树算法有ID3,C ...

  5. mysql sign_mysql - 随笔分类 - signheart - 博客园

    随笔分类 - mysql 摘要:有一个项目需要存储ios的表情(emoji表情)这种表情虽然是utf8编码,但是一个字符需要占用4个字节,而MySQL utf8编码只能存放3字节的字符.在MySQL ...

  6. python编写存储过程_存储过程 - msjaxuexi - 博客园

    什么是存储过程 存储过程是一组任意的sql语句集合,存储在mysql中,调用存储过程时将会执行其包含的所有sql语句;与python中函数类似; 为什么使用存储过程 回顾触发器与视图都是为了简化应用程 ...

  7. mysql 圆周率_mysql - π=3.1415926 - 博客园

    数据库 Database Management System 简称DBMS 包括三大部分构成: 1 数据库文件集合, 主要是一系列的数据文件,作用是存储数据 2 数据库服务端, 主要负责对数据文件以及 ...

  8. mysql declare浮点数_MySQL - Belong_yucl - 博客园

    1.描述表得结构 desc table_name; desc table_name; 2.删除表中得数据 delete from table_name where [约束条件] delete from ...

  9. java bean 单例模式_单例模式 - Beans_bag - 博客园

    1.单例模式的简介 定义 保证每个类仅有一个实例,并给外部提供一个访问它的全局访问点. 思路 如果一个类能够被创建多个实例,那么,这个类的构造方法肯定是公开的,外部通过此类的构造方法可以创建多个类的实 ...

最新文章

  1. 深度学习之核心要素:输入输出、目标函数、前向传播、后向传播、学习率、梯度下降
  2. oracle procedures批量删除带索引条件数据很慢_见微知著,数据库应用设计优化浅谈...
  3. Redis相比memcached
  4. XHTML 相对路径与绝对路径
  5. java实现愤怒的小鸟游戏
  6. 高阶篇:8.1)开模前评审及提交资料;
  7. js 给动态li添加动态点击事件
  8. 谷歌Colab GPU达到使用量限额解决办法
  9. SqlServer2012 File Table文件表
  10. java取linux本地xml,java-使用apache poi读取.xlsx文件会在Linux机器...
  11. linux下安装指定版本的nodejs(升级到指定版本)
  12. 分析Linux内核创建一个新进程的过程
  13. SecureCRT 7.3软件下载及破解工具+教程
  14. 国际贸易术语_Incoterm
  15. hibernate HQL 使用from (select ……)子查询的方法
  16. 计算机综合症怎么治,小窍门防治电脑综合征
  17. ATTCK靶场系列(七)
  18. 关于一体机外卖单不打印外卖单号FAQ(适用正餐6.0.09,轻餐4.0.6.1,轻餐4.0.6.2)
  19. JavaScriptMVC之View
  20. 武夷岩茶PK铁观音(南北乌龙之我见--清风云雨)

热门文章

  1. CentOS如何增加虚拟内存
  2. Codeforces Round #617 (Div. 3)题解全集
  3. 国内HR就业前景如何?你可要知道
  4. gta5打开计算机丢失文件夹,win10怎么找到GTA5存档-win10打开gta5存档文件夹的方法 - 河东软件园...
  5. 【紧急警报】微信绑定手机号疑似存在安全漏洞,黑客可通过微信号获取用户手机号!
  6. 纯css3炫酷科技感菜单
  7. COALESCE函数和NVL函数
  8. ImageView 使用详解
  9. 笔记本开启热点后,笔记本网页无法打开,QQ可以使用,
  10. python制作恶搞_搞几款由“Python”语言编写的“有趣、恶搞、好玩”的程序代码!...