pyhthon基础知识【5】:生成器与迭代器

本节内容:
1、生成器
2、迭代器

----------------------------------------------------------------------------/---------------------------------------------------------------
1、生成器
1.1 列表生成式
>>> [i*2 for i in range(10)]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

相当于
a = [ ]
for i in range(10):
    a.append(i*2)
1.2 生成器概述
1.2.1 生成器的目的:省空间,如果有数据量很大的有规律的列表,很占空间,而生成器是使用到哪一个元素才生成该元素
1.2.2 生成器的关键方法: __nex__t( )        send( )
1.2.3 生成器一次只能取一个数,而且不能跨步,只能一个一个元素往下取
1.3 制作生成器
#方式1:把列表生成式的[]改为(),就变成了一个生成器
>>> (i*2 for i in range(10))
<generator object <genexpr> at 0x03A85690>

#方式2 函数里面使用 yeild 关键字
def fib(max):                                        斐波那契数列生成器
    n,a,b = 0,0,1
    while n < max:
        #print(b)
        yield  b
        a,b = b,a+b
        n += 1
    return 'done'


# a,b = b,a+b等价如下:
t = (b,a+b)
a=t[0]
b=t[1]

1.4用生成器实现单线程下的多线程效果
import time
def consumer (name):
    print ( "%s 准备吃馒头啦!" %name)
    while True :
    mantou = yield

print ( "馒头[%s]来了,被[%s]吃了!" %(baozi , name))

def mantou ( name ):
    c = consumer( 'A' )
    c2 = consumer( 'B' )
    c. __next__ ()
    c2. __next__ ()
    print ( "馒头店开始准备做馒头啦!" )
    for i in range ( 10 ):
        time.sleep( 1 )
        print ( "做了1个馒头,分两半!" )
        c.send(i)
        c2.send(i)

mantou( "James" )

2、迭代器
可迭代对象:可以直接用for循环的对象称为可迭代对象 :Iterable
迭代器: 可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator

迭代器肯定是可迭代的,但是可迭代的不一定是迭代器,如list、tuple、dictionary等是可迭代对象,但是不是迭代器
可迭代对象可以通过iter()函数变为一个迭代器

迭代器的好处是可以存储无限大的数据,因为迭代器是惰性运算,即使用到该元素才生成该元素。




















猜你喜欢

转载自blog.csdn.net/a971956955/article/details/80835141