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

    1,生成器:就是自己用python写的迭代器,生产器的本质就是迭代器
        用以下两种方式构建生成器
    • 通过生成器
    • 生成器表达式
    函数
    def fun():
        x += 1
        return x
    fun() #函数的执行命名,并接受函数返回值
     
    def fun1():
        x += 1
        yield x
    g = fun1()  #生成器函数对象
    g.__next__() #调用 
     
    #一个next对应一个 yield
    #yield 将返回给生成器对象__next__()
     
    return and yield
    return 结束函数, 给函数执行者返回值
    yield 不会结束函数, 一个next对象一个yield给生成器对象__.next__()返回值
     
    区别:
        1:内存级别的区别
        2:迭代器是需要可迭代对象转化, 可迭代对象是非常占内存的
        3:生成器直接创建, 不需要转化, 从本质就节省内存。
     
     
    send 与 yield 
    def fun():
        print(1)
        yield 1
        print(2)
        yield 2
    g = fun()
    g.send('alex')
    #send 与 next 一样, 也是对生成器取值(执行一个yield)的方法
    #send 可以给上一个yield传值
    #第一次永远都是next
    #最后一个yield永远也得不到send传的值
     
     
    列表推到式:一行代码搞定你需要的任何列表
    #循环模式 [变量 (加工后的变量) for ]
    lis = [i for i in range(1,101)]
    #筛选模式[变量 (加工后的变量) for i in name if 条件]
    列表推导式:
        优点:一行解决 , 方便
        缺点:容易着迷, 不易排错, 不超过太刻意用
    #列表推到式不能解决所有列表的问题,不要刻意去用
     
    生成器表达式:将列表推到式的[] 换成()即可。
    G = (i for i in range(1,10000000000000))
    每次只取一个值
     
     
     
     
     
     
  • 相关阅读:
    codeforces#571Div2 D---Vus the Cossack and Numbers【贪心】
    洛谷P1050 循环【java大数】
    洛谷P1972 HH的项链【树状数组】
    uoj#67 新年的毒瘤【Tarjan】
    洛谷1265 公路修建【最小生成树】
    【超实用工具】三维场景绘制工具
    坐标地址批处理工具
    CAD转KML乱码处理
    地理编码逆编码教程
    最新!全球ALOS 12m地形数据介绍及下载
  • 原文地址:https://www.cnblogs.com/leiwenxuan/p/9507453.html
Copyright © 2011-2022 走看看