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}

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

  • 相关阅读:
    用Python完成一个汇率转换器
    鸿蒙如何用JS开发智能手表App
    鸿蒙如何用JS开发智能手表App
    SAP Spartacus SplitViewComponent Migration 的一个具体例子
    SAP Spartacus B2B 页面 Popover Component 的条件显示逻辑
    SAP Spartacus 升级时关于 schematics 的更新
    SAP Spartacus B2B 页面 Disable 按钮的显示原理
    SAP Spartacus B2B 页面 Disable Confirmation 对话框的显示原理
    通过 Feature Level 动态控制 SAP Spartacus 的页面显示
    SAP Commerce Cloud Build Manifest Components
  • 原文地址:https://www.cnblogs.com/GrandDarkness/p/8185340.html
Copyright © 2011-2022 走看看