zoukankan      html  css  js  c++  java
  • python全栈day12

    01 生成器

    什么是生成器?
      就是自己用python代码写的迭代器。本质就是迭代器。

    怎么构建生成器?
      1.通过生成器函数写
      2.生成器表达式

    生成器函数:
      在函数中func()表示执行函数,而当函数体内包含yield,那么函数就是一个生成器,func()就变成了生成器对象。

    def func(x):
        x += 1
        return x        #函数直接返回
        print(666)      #666不会执行
    
    def func1(x):
        x += 1
        yield x         #生成器函数不会中断,可以理解为暂停在yield
        print(666)      #在下一个__next__()执行时666将会被打印
        yield x

    g = func1(5)
    print(g.__next__())  #打印6
    print(g.__next__())  #先打印666,再打印6

      

    yieldreturn的区别

      1.return出现表示函数结束并返回,yield不会中断函数。
      2.return给函数执行者返回值,yield给__next__()返回值,一个next对于一个yield

    生成器函数vs迭代器

      1.自定制区别
      2.内存级别的级别
      迭代器是需要可迭代对象进行转化,可迭代对象是非常占内存的。
      生成器直接创建,不需要转化,从本质就节约内存

    send与next

    send作用:
      1.send与next一样,也是对生成器取值(执行一个yield)的方法
      2.send可以给上一个yield传值

    def func2():
        count = yield 6
        print(count)
        count1 = yield 7
        print(count1)
        yield 8
    
    g = func2()
    print(g.__next__())    #打印6
    print(g.send('alex'))    #通过send将‘alex’传值给了count,所以输出alex,随后输出7
    print(g.send('taibai'))    #通过send将‘taibai’传值给了count1,所以输出taibai,随后输出8
    

       

    send的坑:
      1.第一次取值永远都是next不能用send。
      2.最后一个yield永远也得不到send传的值

    02 列表表达式,生成器生成式

    列表推导式:一行代码几乎搞定你需要的任何列表

    两种模式:
      1.循环模式
      结构:[变量(加工后的变量) for 变量 in iterable]

    例:求出30以内的数,并放入到一个列表中。

    l1 = [i for i in range(1,31)]

     

      2.筛选模式
      结构:[变量(加工后的变量) for 变量 in iterable if 条件]

    例:求出50以内能被3整除的数的平方,并放入到一个列表中。

    l2 = [i**2 for i in range(1,51) if i % 3 == 0]

      

    推导式及生成式优缺点:

      优点:一行解决,方便。
      缺点:容易着迷,不易拍错,不能超过三次循环,不能解决所有列表问题,不要刻意用。

    生成器表达式:
      就是将列表推导式的中括号换为小括号即可。

    字典表达式 and 集合表达式

    详情转链接:http://www.cnblogs.com/jin-xin/articles/8423802.html

  • 相关阅读:
    BZOJ_4320_ShangHai2006 Homework_分块
    BZOJ_3362_[Usaco2004 Feb]Navigation Nightmare 导航噩梦_并查集
    BZOJ_2788_[Poi2012]Festival_差分约束+tarjan+floyed
    BZOJ_2795_[Poi2012]A Horrible Poem_hash+暴力
    BZOJ_1598_[Usaco2008 Mar]牛跑步_A*
    [转载]java匿名对象
    [转载]static in Java
    Bat批处理文件入门
    在set中放入自定义类型
    [转载]C++STL概述
  • 原文地址:https://www.cnblogs.com/abner28/p/9505973.html
Copyright © 2011-2022 走看看