Python 小栈_09:Python 生成器

Posted 211293dlam

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 小栈_09:Python 生成器相关的知识,希望对你有一定的参考价值。

今日所学:

 

一、生成器

 

生成器函数: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 生成器的主要内容,如果未能解决你的问题,请参考以下文章

Python 小栈_03:Python的列表元祖和字典

Python 小栈_05:Python 变量和递归函数

php根据ID生成员工编号 阿星小栈

在Vue项目中动态生成二维码 阿星小栈

Python小代码_11_生成小于 n 的裴波那契数列

python生成器简单代码了理解。