zoukankan      html  css  js  c++  java
  • 生成器、迭代器脚本实例



    def
    counter (start_at=0) : count = start_at while True: val = (yield count) if val is not None: count = val else: count +=1 count = counter(5) #建立一个生成器 print(count.__next__()) #向外面返回一个5,然后count 变为6 print(count.__next__()) #返回一个6 print(count.send(9)) #往yield后面传一个值 print(count.__next__()) count.close() #关闭这个生成器 print(count.__next__()) #不能在生成一个新的值了 执行结果: 5 6 9 10 File "I:/untitled/cx/11月/11-6/2生成器函数.py", line 38, in <module> print(count.__next__()) StopIteration

    调用next,它就去寻找yield,然后打印后面的值。

    第二题

     有⼀个数据结构如下所⽰,请编写⼀个函数从该结构数据中返回由指定的字段和对应的值组成的字 典。如果指定字段不存在,则跳过该字段。(10分)
     data:{"time":"2016-08-05T13:13:05",
     "some_id":"ID1234",
     "grp1":{    "fld1":1,
     "fld2":2},
     "xxx2":{    "fld3":0,
     "fld5":0.4},
     "fld6":11,
     "fld7":7,
     "fld46":8}
     fields:由"|"连接的以"fld"开头的字符串,如:fld2|fld3|fld7|fld19
    
     def  select(data,fields):
     TODO:implementation
    return result
    data= {"time":"2016-08-05T13:13:05","some_id":"ID1234","grp1":{    "fld1":1,"fld2":2},
              "xxx2":{    "fld3":0,"fld5":0.4},"fld6":11,"fld7":7,"fld46":8}
    fields = "fld2|fld3|fld7|fld19"
    
    第一种解法
    def  select(data,fields):
        result = {}
        fields_lst = fields.strip().split('|')
        for m in data.keys():
            if m in fields_lst:
                result[m] = data[m]
            elif type(data[m]) == dict:
                for n in data[m].keys():
                    if n in fields_lst:
                        result[n] = data[m][n]
        return result
    print(select(data,fields))
    
    第二种解法
    def  select(data,fields):
        result = {}
        result_1={}
        fields_lst = fields.strip().split('|')
        for m in data.keys():
            if type(data[m]) == dict:
                for n in data[m].keys():
                    result_1[n] = data[m][n]
            else:
                result_1[m] = data[m]
        for k in fields_lst:
            if k in result_1.keys():
                result[k] = result_1[k]
        return result
    print(select(data,fields))

    3.动态生成平均值

    def averager():
        total = 0.0
        count = 0
        average = None
        while True:
            term = yield average
            total += term
            count += 1
            average = total/count
    
    
    g_avg = averager()
    next(g_avg)
    print(g_avg.send(10))
    print(g_avg.send(30))
    print(g_avg.send(5))

    4.生成器动态监听文件输入

    import time
    
    
    def tail(filename):
        f = open(filename)
        f.seek(0, 2) #从文件末尾算起
        while True:
            line = f.readline()  # 读取文件中新的文本行
            if not line:
                time.sleep(0.1)
                continue
            yield line
    
    tail_g = tail('tmp')
    for line in tail_g:
        print(line)

    5.金典1

    def demo():
        for i in range(4):
            yield i
    
    g=demo()
    
    g1=(i for i in g)
    g2=(i for i in g1)
    
    print(list(g1))
    print(list(g2))

    6金典2

    def add(n,i):
        return n+i
    
    def test():
        for i in range(4):
            yield i
    
    g=test()
    for n in [1,10]:
        g=(add(n,i) for i in g)    =》(add(10,i) for i in add(10,i) for i in [0,1,2,3])
                                      这是一个生成器,在打印结果之前不会执行。
    print(list(g))
  • 相关阅读:
    东南大学2021年高等代数
    北京师范大学2021年数学分析
    华东师范大学2021年数学分析考研试题参考解答修正版
    中国科学院大学2021年数学分析考研试题参考解答
    [数学考研竞赛00052]浙江大学2021年数学分析考研试题参考解答
    python3.6, cv2.imread()导入图片失败,none
    python商品分类信息
    mongodb 聚合(Map-Reduce)
    mongodb 聚合(aggregate)
    Java-Security(七):Spring Security方法注解认证启用
  • 原文地址:https://www.cnblogs.com/yangmingxianshen/p/7800265.html
Copyright © 2011-2022 走看看