mysql迭代器_迭代器 - 御姐玫瑰 - 博客园

一、协程

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、示例

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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__】方法。

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

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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

可迭代对象示例代码

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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循环遍历的类。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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

运行结果:

2133cca0ea6cb64caad59fb76b23472c.png

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

运行结果:

196d6c865ceff0ef0ad57d22ea2f6e5a.png

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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


版权声明:本文为weixin_33219863原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。