首页 > 代码库 > python学习之迭代器与生成器

python学习之迭代器与生成器

1、迭代器省内存

    迭代器只允许往后读数据,不允许回读数据

    迭代器不能跳着读文件,因为他是一点一点加载文件内容到内存的,读完了可以销毁或丢掉

 

2、生成一个迭代器

a = iter(["fd", "ss", "dd", "ff"])

 

3、迭代器方法:

python3.0以上:__next__(); python2.7:next()

a.__next__()   读取的是fd

a.__next__()   读取的是ss

a.__next__()   读取的是dd

a.__next__()   读取的是ff

a.__next__()   会提示错误,停止迭代

 

4、linux中的cat、more、less等方法都类似迭代器效果

 

5、迭代器的用途:

f = open(*****)

for line in f: //类似于2.7里面的xreadlines()

    print(line)

//这种读的方式就是迭代的读取方式,所以这么读比较快速。

//比f.read() 和 f.readlines()效率高很多

 

6、生成器  generator

一个函数调用时返回一个迭代器,那这个函数就叫生成器,如果函数中包含yield语法,那这个函数就会变成生成器

6.1

def cash(amount):

    while amount > 0:

        amount -= 100

        yield 100 //这个关键字此时在这里做了一个返回操作

        print("我是一个生成器")

atm = cash(500)

print(atm.__next__())

print(atm.__next__())

print("随时跳出函数与循环") //就相当于异步操作

print(atm.__next__())

print(atm.__next__())

print(atm.__next__())

6.2

import time

def consumer(name):

    print("%s 准备吃包子啦" % name)

    while True:

        baozi = yield //此时yield做为一个接收值的容器

        print("包子[%s]来了,被[%s]吃了")

 

def producer(name):

    c1 = consumer(‘A‘)

    c2 = consumer(‘B‘)

    c1.__next__() //为了打印第一句话“准备吃包子啦”

    c2.__next__() //为了打印第一句话“准备吃包子啦”

    print("老子开始做包子啦")

    for i in range(10):

        time.sleep(1)

        print("做了2个包子")

        c1.send(i)

        c2.send(i)

 

producer("hehe")

python学习之迭代器与生成器