• DAY12-----生成器


    一丶生成器

    生成器:本质是迭代器,写法和迭代器不一样.用法和迭代器一样

    print("__iter__"in dir(gen))

    生成器函数:函数中带有yield,执行生成器函数的时候返回生成器,而不是执行这个函数

    def func

      print("你好啊,我叫赛利亚")

      yield"西岚的武士刀" #retunrn和yield都可以返回数据

    ret=func() #ret是一个生成器

    print(ret)

    s=__next__() #当执行到__next__()的时候,函数菜真正开始执行

    print("接收的是",s)

    特点:

      1.节省内存,几乎不占内存

      2.惰性机制

      3.只能往前走

    send()也可以实现类似__next__()的效果,send()可以给上一个yild传值

    def func()

      print("韭菜盒子")

      a=yield"哇哈哈"

      print("肉包子"a)

      b=yield"脉动"

      print("锅包肉",b)

      yield"冰红茶"

    gen=func

    ret=gen.__next__()

    print(ret)

    ret=gen.send("刘德华")   #给上一个yield传值

    print(ret)

    send和__next__()的区别

      1.send不可以开头

      2.send可以给上一个yield传值,不能给最后一个yield传值

      3.生成器本质是迭代器.print("__iter__"in dir(gen))

      4.生成器可以直接用for

    lst=list(gen)#把生成器中的每一个数据拿出来组合成一个列表

    print(lst)

    二丶推导器

    列表:[结果  for循环  if筛选]

    获取1-100内能被3整除的数
    lst = [i for i in range(1, 101) if i % 3 == 0]

    # 100以内能被3整除的数的平⽅
    lst = [i*i for i in range(1, 101) if i % 3 == 0]
    寻找名字中带有两个e的⼈的名字

    names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven','Joe'],
    ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]

    lst = [name for first in names for name in first if name.count("e") >= 2 ]
    print(lst)

    字典:{key:value  for循环  if 筛选}

    lst1 = ["东北", "陕西", "山西", "开封", "杭州", "广东", "济南"]
    lst2 = ['大拉皮', "油泼面", "老陈醋", "灌汤包", "西湖鲤鱼", "早茶", "胶东一锅鲜"]

    dic = {lst1[i]:lst2[i] for i in range(len(lst1))}
    print(dic)

    集合推导器  无需不重复 可哈希

    {key  for  if}

    元祖没有推导式

    三丶生成器表达式

    生成器表达式:记录一下代码.然后每次需要的时候去生成器中执行这个代码

    列表推导式:一次性把所有的数据创建出来,容易产生内存浪费

    特性

      1.节省内存

      2.惰性机制

      3.只能向前

    生成器函数
    def func():
    print(111)
    yield 222

    g = func() # 生成器

    g1 = (i for i in g) # 生成器
    g2 = (i for i in g1) # 生成器


    print(list(g1)) # 222
    print(list(g2))
    print(list(g)) # 才会开始真正的取数据
  • 相关阅读:
    【转】千万级并发实现的秘密:内核不是解决方案,而是问题所在!
    漫话NUMA
    【转】为什么要内存对齐 Data alignment: Straighten up and fly right
    【转】内存地址对齐运算
    DPDK收发包处理流程-----(一)网卡初始化
    Nginx WebSocket proxying example
    nginx example
    kerberos-ldap linux账户集中管理认证
    利用i节点删除乱码文件
    linux sar命令详解
  • 原文地址:https://www.cnblogs.com/lilei1996/p/9669304.html
Copyright © 2020-2023  润新知