• 生成器和迭代器


    '''
    通过列表推导式,可以直接创建一个列表
    但是受到内存的限制,列表的容量肯定是有限的
    那么现在我们要创建一个100W元素的列表,应该用一个什么方法
    如果列表的元素可以推理出来,用到哪里推到哪里,不断释放资源就不会浪费内存
    这样就不需要创建一个完整的列表
    一边循环一遍创建的方式就是生成器
    '''

    # 得到生成器的方式有几种:
    # 1.通过列表推导式 [x for x in range(1000000000000)] ,[x for x in range(10000) if x%3 = 0]这种的不算
    # 得到生成器generator 把方括号变成小括号 a = (x for x in range(10000) if x%3 = 0) 这种就行
    # 那么如何取出里面的元素?需要的时候帮你产生一个
    # (1)print(a.__next__()) 不参加参数的话就是调用一次,也就是产生一次
    # (2)用系统自带的next next(a) 这种方式也可以
    # 但是如果是(1)和(2)里面结合的话 就是都可以使用 ,但是也是有一次算一次,不会因为重新用了新方法而从头开始
    # 如果调用的次数超过异常的那么可以用try 和 except 来进行
    # 在可能产生异常的代码 进行try处理

    # 2.借助函数完成
    # 斐波那契函数
    # 只要函数中出现了yield那么就是一个生成器了
    # def func():
    # n = 0
    # while True:
    # n += 1
    # yield n # 这个yield 是一个关键,告诉底层这是一个生成器
    '''
    步骤:
    1.定义一个函数,函数中使用yield关键字
    2.调用函数,接受调用的结果
    3.得到的结果就是生成器
    4.借助__next__() 和next()
    yield = return n + 暂停
    '''

    # 斐波那契函数:
    # def fib(length):
    # a, b = 0, 1
    # n = 0
    # while n < length:
    # yield b
    # a, b = b, a + b
    # n += 1
    # return 'ab' 这一行的作用就是在生成器没有更多的产生的时候就会return这个值,以报错信息的方式告我们的

    # g = fib(10)
    # print(g)
    # print(next(g))
    # print(next(g))
    # print(next(g))
    # print(next(g))
    # print(next(g))
    # print(next(g))
    # print(next(g))


    # def gen():
    # i = 0
    # while i < 5:
    # temp = yield i
    # print('temp:',temp)
    # i+=1
    # return '没有更多的了'
    #
    # g = gen()
    # print(next(g))
    # print(next(g))
    # print(next(g))
    # g.send(None)
    # g = g.send('哈哈')
    # print(g)

    '''
    生成器方法:
    __next__():获取下一个元素
    send(value):获得下一个元素,同时可以往里面送数据 注意:第一次调用必须传一个空值
    '''

    # 携程(进场---线程----携程)
    # 迅雷下载的时候 默认是开十个线程
    def task1(n):
    for i in range(n):
    print('正在搬砖第{}块'.format(i))
    yield None
    def task2(n):
    for i in range(n):
    print('正在听第{}歌'.format(i))
    yield None

    g1 = task1(10)
    g2 = task2(10)

    for i in range(10):
    g1.__next__()
    g2.__next__()

  • 相关阅读:
    20210420
    20210419
    2021041601
    20210416
    20210415
    20210414
    20210413
    20210412
    20210409
    20210405
  • 原文地址:https://www.cnblogs.com/SmartCat994/p/12306924.html
Copyright © 2020-2023  润新知