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

    1.生成器是 python用自己的代码写的迭代器,其本质是迭代器。

    2.构建生成器的两种方法

      1.生成器函数。

    def num(x):
        s = x*x
        s1 = x + 1
        print(666)
        yield s
        print(777)
        yield s1
    print(num(3))
    num1 = num(3)
    print(next(num1))
    print(next(num1))
    

    3.生成器vs迭代器

      1.自制的区别:

        

    def num(x):
        s = x*x
        s1 = x + 1
        print(466)
        yield s
        print(217)
        yield s1
    print(num(3))
    num1 = num(3)
    print(next(num1))
    print(next(num1))
    

      

    l = [1,2,3,4,5]
    l1 = iter(l)
    

      2.内存级别的区别:

        迭代器需要对可迭代对象进行转化,可迭代对象数据量大时非常占用内存

        生成器直接转创建,不需要转化,从本质上节省内存

    num1 = num(100000000000)
    for a in range(1,101):
        print(next(num1))
    for a in range(1,101):
        print(next(num1))
    

    4.send 与next

      send 与next 一样都是生成器取值(执行一个yield)的方法

      send可以给上一个yield传值

      第一次取值永远都是next

      send取不到最后一个yield值

    def fun():
        count = yield 1
        print(count)
    
        count1 = yield 11
        print(count1)
        yield 111
    g = fun()
    next(g)
    # g.send('45')
    g.send('2')
    g.send('22')
    

    5.列表推导式,一行代码基本能满足生成常用的列表

      一行解决,非常方便

      不容易排错,循环次数不能超过三次

      复杂的列表,不能用列表推导式生成不要勉强使用

    l = (i for i in range(100) if i % 2 == 0)
    print(l)
    

      

      

      

  • 相关阅读:
    有序向量
    无序向量
    设计模式入门
    策略模式
    面向对象相关知识点
    MySQL数据库知识培训
    数据库业务规范
    go最小路径
    go求质数
    CSS3
  • 原文地址:https://www.cnblogs.com/lijinming110/p/9507639.html
Copyright © 2011-2022 走看看