zoukankan      html  css  js  c++  java
  • 生成器

    在python社区,普遍认为生成器的本质就是迭代器。唯一的区别:生成器是自己用python代码构建的数据结构;而迭代器都是通过提供、转化得到的

    获取生成器的三种方式:1.生成器函数  2. 生成器表达式  3.python内部提供

    1.生成器函数

    def func():
        print(111)
        print(222)
        yield 3
        yield 4
    
    ret = func()  # 返回一个生成器对象
    print(ret)
    print(next(ret)) # 通过next(生成器对象)从上到下依次取yiled对应的值,一个next对应一个yield
    print(next(ret)) # yield不会使整个函数结束
    def gen_func():
        for i in range(1, 5001):
            yield f'{i}号包子'
    
    ret = gen_func()
    for i in range(200):
        print(next(ret))
    
    for i  in range(200):  # next()在整个程序结束前会记住其当前的位置
        print(next(ret))
    # yield from  优化内层循环,提高效率
    def func1():
        l1 = [1, 2, 3, 4, 5]
        yield from l1   # 将l1这个列表变成了迭代器返回其中的每一个元素
        """
        yield from l1 的等价如下
    
        yield 1
        yield 2
        yield 3
        yield 4
        yield 5
        """

    ret = func1()
    print(next(ret))
    print(next(ret))

    def func2():
        l1 = ['卫龙', '老冰棍', '北冰洋', '牛羊配']
        l2 = ['馒头', '花卷', '豆包', '大饼']
    
        yield from l1
        yield from l2
    
    g = func2()  # 生成器对象
    
    """
    for i in range(8):
        print(next(g))
    """
    
    for i in g:
        print(i)

    2. 生成器表达式 

    obj = (i for i in range(1, 11)) # 生成器表达式
    for i in obj:
        print(i)
  • 相关阅读:
    【AtCoder】Tenka1 Programmer Contest(C
    【AtCoder】AGC024
    【AtCoder】ARC098题解
    java反射机制详解 及 Method.invoke解释
    Spring切入点表达式常用写法
    border-radius 样式表CSS3圆角属性
    jquery判断自己是父节点的第几个子节点
    Spring事务配置的五种方式
    Spring中PropertyPlaceholderConfigurer的使用
    js中使用s(c)标签
  • 原文地址:https://www.cnblogs.com/GOD-L/p/13528238.html
Copyright © 2011-2022 走看看