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 %