码迷,mamicode.com
首页 > 编程语言 > 详细

Python 小栈_09:Python 生成器

时间:2020-03-14 14:32:01      阅读:64      评论:0      收藏:0      [点我收藏+]

标签:ext   接收   形式   pen   位置   beijing   range   imp   cer   

今日所学:

 

一、生成器

 

生成器函数:yield的好处
1、yield可返回值,与return相比可返回多次
2、yield可保存状态,可以基于上次next的位置再进行下一次的yield返回操作,接着往下走。

import time def delivery(): print("开始生孩子啦") yield "我" time.sleep(4) print("开始生儿子啊") yield "儿子" time.sleep(4) print("开始生孙子啦") yield "孙子" li=delivery() print(li.__next__()) print(li.__next__()) print(li.__next__())

  


def pro_li(): for i in range(1,20): print("正在生产包子") print("正在卖包子") yield "一屉包子%s"%i a=pro_li() print(a.__next__()) print(a.__next__())

yield的优点:
1、延迟计算,一次返回一个结果

2、还能有效地提高代码可读性

def jidan(): for i in range(1,15): yield "鸡蛋%s"%i a=jidan() res=a.__next__() print("happy取走了",res) res=a.__next__() print("happy取走了",res)

 举例: 

tell内容:
{"city":"beijing","population":1322432}
{"city":"shanxi","population":1320000}
{"city":"anhui","population":1536752}
{"city":"hunan","population":906836455}

人口普查取和
def popu(): with open("tell","r",encoding="utf-8") as f: for i in f: yield i popu_li=popu() res=0 for i in popu_li: a=eval(i) --->注意:文件所有的记录都是以字符串形式的,要使用eval()函数把字符串中的字典形式提取出来 print(a["population"]) --->把字典中的population中的V值提取出来 res+=a["population"] --->求人口总和 print(res)

  


生产者消费者模型
def consumer(name): print("我是[%s],我准备开始吃包子了"%name) while True: baozi=yield --->到这里终止 print("%s 很开心地把[%s]吃掉了"%(name,baozi)) def prodecer(): c1 = consumer("happy") --->调用执行consumer()函数 c2 = consumer("banana") c1.__next__() c2.__next__() for i in range(1,15): c1.send("包子%s"%i) c2.send("包子%s" % i) prodecer()

#可使两个程序重复交替进行

  

二、触发生成器函数的运行

 

1、_next_()

2、.next()

3、.send(self,value)

yield 3相当于return,控制的是函数的返回值

x=yield的另外一个特性,接收send传过来的值,赋值给x

 


def a(): for i in range(1,10): yield "鸡蛋%s"%i b=a() print(b.__next__()) print(b.__next__()) print(b.__next__()) print(b.__next__()) print(b.send(None)) print(b.send(None)) print(b.send(None)) print(b.send(None))

>>>

鸡蛋1
鸡蛋2
鸡蛋3
鸡蛋4
鸡蛋5
鸡蛋6
鸡蛋7
鸡蛋8

 

 

  

以上。

 

Python 小栈_09:Python 生成器

标签:ext   接收   形式   pen   位置   beijing   range   imp   cer   

原文地址:https://www.cnblogs.com/211293dlam/p/12491933.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!