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)
    

      

      

      

  • 相关阅读:
    linux文件属性基础篇
    Linux重定向符号(重点)
    linux---vim和grep
    linux目录文件与系统启动(3)/usr目录、/var目录和/proc目录讲解
    Linux 安装和 连接xshell
    shiro 快速入门详解。
    th 表达式的简单使用。
    springboot 分布式项目,子级项目各自的作用。
    springboot 配置百里香 thymeleaf?
    springboot 配置mybatis 配置mapper.xml
  • 原文地址:https://www.cnblogs.com/lijinming110/p/9507639.html
Copyright © 2011-2022 走看看