zoukankan      html  css  js  c++  java
  • day19__生成器,迭代器

    一、列表解析

    l1 = ['鸡蛋%s' % i for i in range(10) if i > 5]
    print(l1)     # ['鸡蛋6', '鸡蛋7', '鸡蛋8', '鸡蛋9']

    这种方法比较占内存,因为要先生成列表,列表占内存
    print(sum(i for i in range(100000000)))

    这种方法计算 1-10000000 的和计较节省内存, 如果直接用 sum([i for i in range(100000000)]),会先生成列表,比较占内存

    二、生成器函数

    import time
    def test():
        print('开始生孩子啦。。。。。。')
        yield '' #return
        time.sleep(3)
        print('开始生儿子啦')
        yield '儿子'
        time.sleep(3)
        print('开始生孙子啦')
        yield '孙子'
    
    res=test()
    print(res)            # <generator object test at 0x00000000010C2A40>
    print(res.__next__()) # 开始生孩子啦。。。。。。
    #
    print(res.__next__()) # 开始生儿子啦
    #                       儿子
    print(res.__next__()) # 开始生孙子啦
    #                       孙子

    三、计算人口比例

    def get_nume():
        with open('2.py','r',encoding='utf-8') as f:
            for line in f:
                yield line
    
    gen = get_nume()
    res = sum(int(eval(i)['population']) for i in gen)
    print('总人数为:%s' %res)      # 10
    
    gen = get_nume()     # gen 已经被迭代完了。需要重新赋值
    for i in gen:
        print(eval(i)['name'],':',int(eval(i)['population'])*100/res,'%')     # 北京 : 10.0 %
                                                                                # 河南 : 20.0 %
                                                                                # 江苏 : 30.0 %
                                                                                # 广东 : 40.0 %
  • 相关阅读:
    C# 6.0
    C# 4.0
    C# 5.0
    C# 3.0
    C# 2.0
    C# 1.0(2002)
    字典树Trie
    Hadoop——生态体系
    程序是怎样跑起来的
    Redis实战(十七)Redis各个版本新特性
  • 原文地址:https://www.cnblogs.com/zhangguoxv/p/9798547.html
Copyright © 2011-2022 走看看