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

    # 生成器 —— 迭代器
    # 生成器函数
    # 含有yield关键字的函数都是生成器函数
    # 生成器函数的特点
    #调用之后函数内的代码不执行,返回生成器
    #每从生成器中取一个值就会执行一段代码,遇见yield就停止。
    #如何从生成器中取值:
    # for :如果没有break会一直取直到取完
    # next :每次只取一个
    # send :不能用在第一个,取下一个值的时候给上个位置传一个新的值
    # 数据类型强制转换 :会一次性把所有数据都读到内存里
    def generator():
        for i in range(20):
            yield '哇哈哈%s'%i
    
    g = generator()  #调用生成器函数得到一个生成器
    for i in g:   #或print(list(g))  数据类型强制转换
        print(i)
    
    
    def tail(filename):
        f = open(filename,encoding='utf-8')
        while True:
            line = f.readline()
            if line.strip():
                yield line.strip()
    
    g = tail('file')
    for i in g:
        if 'python' in i:
            print('***',i)

    send

    #send 获取下一个值的效果和next基本一致
    #只是在获取下一个值的时候,给上一yield的位置传递一个数据
    #使用send的注意事项
    # 第一次使用生成器的时候 是用next获取下一个值
    # 最后一个yield不能接受外部的值
    # def generator():
    #     print(123)
    #     content = yield 1
    #     print('=======',content)
    #     print(456)
    #     arg = yield 2
    #     ''''''
    #     yield
    # g = generator()
    # ret = g.__next__()
    # print('***',ret)
    # ret = g.send('hello')   
    # print('***',ret)

    生成器表达式

    #[每一个元素或者是和元素相关的操作 for 元素 in 可迭代数据类型]    #遍历之后挨个处理
    #[满足条件的元素相关的操作 for 元素 in 可迭代数据类型 if 元素相关的条件] #筛选功能
    # egg_list=['鸡蛋%s'%i for i in range(10)]    #列表推导式
    # print(egg_list)

    # 老母鸡=('鸡蛋%s'%i for i in range(10))   #生成器表达式
    # print(老母鸡)
    # for 蛋 in 老母鸡:
    # print(蛋)

    # #30以内所有能被3整除的数
    # ret = [i for i in range(30) if i%3 == 0]  #完整的列表推导式
    # g = (i for i in range(30) if i%3 == 0)  #完整的生成器推导式
    # print(ret)
    #
    # #30以内所有能被3整除的数的平方
    # ret = [i*i for i in (1,2,3,4) if i%3 == 0]
    # ret = (i*i for i in range(30) if i%3 == 0)
    # print(ret)
    #
    # # 例三:找到嵌套列表中名字含有两个‘e’的所有名字
    # names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],
    #          ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]
    # ret = [name for lst in names for name in lst if name.count('e') ==2]
    # ret = (name for lst in names for name in lst if name.count('e') ==2)
    # print(ret)
    
    #字典推导式
    
    
    # 例一:将一个字典的key和value对调
    # mcase = {'a': 10, 'b': 34}
    # #{10:'a' , 34:'b'}
    # mcase_frequency = {mcase[k]: k for k in mcase}
    # print(mcase_frequency)
    
    # 例二:合并大小写对应的value值,将k统一成小写
    # mcase = {'a': 10, 'b': 34, 'A': 7, 'Z': 3}
    # #{'a':10+7,'b':34,'z':3}
    # mcase_frequency = {k.lower(): mcase.get(k.lower(), 0) + mcase.get(k.upper(), 0) for k in mcase}
    # print(mcase_frequency)
    
    #集合推导式,自带结果去重功能
    # squared = {x**2 for x in [1, -1, 2]}
    # print(squared)
    各种推导式及应用
  • 相关阅读:
    git log
    [转]深入详解javascript之delete操作符
    js性能优化文章集锦
    [转]A记录和CNAME记录的区别
    [转]200 OK (from cache) 与 304 Not Modified------没有这个规则(ETag是否移除)!!!from cache和304,请查看顶部的流程图!
    nodejs渲染到页面的理解
    git之reset
    Mayavi入门
    OpenAcc笔记——update
    Qt笔记——数据库的图形界面
  • 原文地址:https://www.cnblogs.com/aj-AJ/p/11162870.html
Copyright © 2011-2022 走看看