zoukankan      html  css  js  c++  java
  • python 生成器函数

    从生成器中取值的方法

      next

      for循环

      数据类型的强制转换 缺点:占内存

    生成器函数的进阶

    send的使用效果

    def generator():
        print(123)
        content = yield 1
        print('=====',content)
        print(456)
        yield 2
    
    g = generator()
    ret  = g.__next__()
    print('***',ret)
    ret = g.send('hello')
    print('***',ret)

    123
    *** 1
    ===== hello
    456
    *** 2

      send获取下一个值的效果和next基本一致

      只是在获取下一个之的时候,给上一个之的位置传递一个数据

    使用send的注意事项

      第一次使用生成器的时候,是用next获取下一个值

      最后一个yield不能接受外部的值

    yield from

    def gen1():
        for c in 'AB':
            yield c
        for i in range(3):
            yield i
    print(list(gen1()))
    
    def gen2():
        yield from 'AB'
        yield from range(3)
    print(list(gen2()))

    从一个容器中取值,集体返回  可以一个一个接收

    列表推导式

    g = (i*i for i in range(10))
    for i in g:
        print(i)

    效果是打印出十以内的每个数的平方

    names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],
             ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]
    print([name for lst in names for name in lst if name.count('e') >= 2])

    ['Jefferson', 'Wesley', 'Steven', 'Jennifer']

    找到嵌套列表中名字含有两个‘e’的所有名字

    生成器表达式

    g = [i*i for i in range(30) if i%3==0]
    print(g)

    在列表中打印出能整除三的数的平方

     列表推导式和生成器表达式的区别

      括号不一样

      返回的值不一样===几乎不占用内存

    各种推导式:生成器  列表   字典   集合

    字典

    合并大小写对应的value值,将k统一成小写

    mcase = {'a':10,'b':34,'A':7,'Z':3}
    mcase_frequency = {k.lower():mcase.get(k.lower(),0)+mcase.get(k.upper(),0) for k in mcase.keys()}
    print(mcase_frequency)

    {'a': 17, 'z': 3, 'b': 34}

    将一个字典的key和value对调

    mcase = {'a':10,'b':34,'A':7,'Z':3}
    mcase_frequency = {mcase[k]: k for k in mcase}
    print(mcase_frequency)

    {10: 'a', 3: 'Z', 34: 'b', 7: 'A'}

    集合

    计算列表中每个值的平方,自带去重功能

    squared = {x**2 for x in [1,-1,2]}
    print(squared)

    {1, 4}

      它们都有遍历操作和筛选操作

  • 相关阅读:
    流程图
    如何撰写简历
    产品经理-visio
    关于 EF 对象的创建问题
    LINQ To EF
    IQueryable 与 IEnumberable 接口的区别
    UWP自动填充控件AutoSuggestBox小优化
    xamarin UWP证书问题汇总
    xamarin UWP中MessageDialog与ContentDialog的区别
    xamarin UWP自定义圆角按钮
  • 原文地址:https://www.cnblogs.com/GrandDarkness/p/8185340.html
Copyright © 2011-2022 走看看