# ********** 读取文件 计算出人口总数 用生成器方式 f = open("city", 'r', encoding='utf-8') # 用utf-8格式打开文件 def get_p(): for i in f: # 循环遍历整个文件 yield eval(i) # 将读取到的字符串,转换成字典格式,用yield 转换为生成器 g = get_p() # print(next(g)['p']) a = 0 # 用于存放总数 for i in g: a = a + i['p'] print(a) f.close() # ************* send 方法 练习 使用yield实现线程并发(协程) def consumer(): while True: # 传过来多次所以要循环 file = yield # file 等待 send 传值 print(file) def producer(): c1 = consumer() # 调用consumer() c2 = consumer() next(c1) # c1 为生成器对象 使用next方法调用下一个参数 next(c2) for i in range(5): # range 循环 c1.send(i) # 使用send 方法传值 c2.send(i) # 一起进行 producer()
city.txt 文件
{ 'name':'上海','p':10} { 'name':'北京','p':10} { 'name':'河北','p':10}