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 %

 

posted @ 2018-10-23 12:19  *精灵鼠*  阅读(121)  评论(0编辑  收藏  举报