• 生成器和迭代器_python


    一、生成器简介(generator)

    在进行较大数据的存储,如果直接存储在列表之中,则会可能造成内存的不够与速度的减慢,因为列表创建完是立即创建并存在的,而在python中生成器(generator)能够很大程度上解决这个问题,生成器并不一开始直接创建所有的数据,而是进行一种"惰性的运算",即创建的时候,我们创建的只是一个生成器的对象,里面记录的是方法,而没有生成数据,可以使用特殊的方法,进行随用随取,并且生成器只能遍历一遍。

    1、创建生成器

     第一种:表达式

    g=(x**2 for x in range(1,10))
    print(g) #<generator object <genexpr> at 0x0000022898B6C0F8>

    第二种:使用了 yield 的函数被称为生成器(generator)。
    def foo():
    print('ok1')
    yield 1
    print('ok2')
    yield 2
    return None

    2、调用生成器
    第一种:for循环遍历
    for i in g:
    print(i) #1 4 9
    for i in foo():
    print(i)

    第二种:s.__next__()方法或者next(s):
    print(g.__next__())  #1
    print(next(g)) #4 (常用写法)
    print(g.__next__()) #9

    3、装饰器send的使用:就是交互给yield前面的赋值,交互作用(要先next进去)
    def foo():
    print('ok1')
    count=yield 1
    print(count) #交互,打印123
    yield 2
    # return None

    b=foo()
    next(b)
    b.send('123')

    4、简单的例子:消费者生产者小程序

    import time
    def consumer(name):
    print('%s 准备吃包子了'%name)
    while True:
    baozi=yield #接收做的包子
    print('包子%s来了,被%s吃了'%(baozi,name))

    def producer(name):
    c=consumer('A')
    c2=consumer('B')
    next(c)
    next(c2)
    print("%s开始做包子了"%name)
    for i in range(10):
    time.sleep(1)
    print('做了两个包子')
    c.send(i) #做的包子传给消费者
    c2.send(i) #做的包子传给消费者
    producer('chen')

    二、迭代器
    1、迭代器简介

      迭代器是一个可以记住遍历的位置的对象。

      迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。

      迭代器有两个基本的方法:iter() 和 next()

      字符串,列表或元组对象都可用于创建迭代器。

      生成器都是迭代器,迭代器不一定是生成器。

  • 相关阅读:
    程序猿神吐槽,说出那些苦逼的日子!
    java设计模式演示样例
    DP Leetcode
    标准差(standard deviation)和标准误差(standard error)你能解释清楚吗?
    移动开发 Native APP、Hybrid APP和Web APP介绍
    Oracle cloud control 12c 的启动与关闭
    Ubuntu文件的复制、移动和删除命令
    Android中集成第三方库的方法和问题
    腾讯QQ企业邮箱POP3/SMTP设置
    又发现支付宝和淘宝的设计漏洞
  • 原文地址:https://www.cnblogs.com/chenxiaozan/p/12154197.html
Copyright © 2020-2023  润新知