协程函数

1、协程函数吃包子简洁案例

  下面代码中需要注意的是,yield的位置和作用,仔细看运行原理

def eater(name):
    print(‘%s start to eat food‘ %name)#第一个print
    while True:
        food=yield
        print(‘%s get %s ,to start eat‘%(name,food))#第二个print
    print(‘done‘)
e=eater(‘钢蛋‘)#e是生成器
print(e)#打印生成器的内存地址
print(next(e))#next触发函数执行,执行第一个print后碰到yield是停止,但yield后面没有值,所以返回None
# >>钢蛋 start to eat food
# >>None
print(next(e))#next触发函数执行,再上一个yield处开始运行,打印第二个print-->while true->又碰到yield后停止,但yield后面没有值,所以返回None
# >>钢蛋 get None ,to start eat
# >>None

  既然yield以表达式的形式出现了,我们就不得不想到赋值,那要赋值就得先传值,这里就会用到g.send(value),g指生成器,g.send(value)作用就和next(g)差不多一样,都是会触发函数进行运行一次,不一样的是,g.send(value)会把参数value传给yield再由yield赋值给等式另一边的对象,这个参数不会作为yield的返回值

def eater(name):
    print(‘%s start to eat food‘ %name)#第一个print
    while True:
        food=yield
        print(‘%s get %s ,to start eat‘%(name,food))#第二个print
    print(‘done‘)
e=eater(‘钢蛋‘)#e是生成器
next(e)#next触发执行一次打印第一个print后碰到yield停止,这里没有打印
# >>钢蛋 start to eat food
e.send(‘包子‘)#send和next一样都会触发函数运行,碰到yield后停止得到一个返回值,不一样的地方就是send会把自己的参数交给当前暂停的yield,再由yield交给他赋值给的对象,这里是food,然后打印第二个print在经过whiletrue碰到yield停止,这里没有打印e.send(‘包子‘)的返回值
# >>钢蛋 get 包子 ,to start eat
print(e.send(‘包子‘))#加上上面的运行结果后,还要返回None,因为yield后面依旧没有值,所以send执行完后他传入的参数也没了
# >>钢蛋 get 包子 ,to start eat
# >>None

  吃包子欢乐行,yield的返回值就是包子单,注意运行原理,始终围绕yield走

def eater(name):
    print(‘%s start to eat food‘ %name)#第一个print
    food_list=[]
    while True:
        food=yield food_list
        print(‘%s get %s ,to start eat‘%(name,food))#第二个print
        food_list.append(food)
    print(‘done‘)
e=eater(‘钢蛋‘)#e是生成器
print(next(e))
print(e.send(‘包子‘))
print(e.send(‘韭菜包子‘))
print(e.send(‘榴莲包子‘))

#运行结果如下:
# 钢蛋 start to eat food
# []
# 钢蛋 get 包子 ,to start eat
# [‘包子‘]
# 钢蛋 get 韭菜包子 ,to start eat
# [‘包子‘, ‘韭菜包子‘]
# 钢蛋 get 榴莲包子 ,to start eat
# [‘包子‘, ‘韭菜包子‘, ‘榴莲包子‘]

  

时间: 2024-12-24 15:30:54

协程函数的相关文章

python协程函数、递归、匿名函数与内置函数使用、模块与包

目录: 协程函数(yield生成器用法二) 面向过程编程 递归 匿名函数与内置函数的使用 模块 包 常用标准模块之re(正则表达式) 一.协程函数(yield生成器用法二) 1.生成器的语句形式 a.生成器相关python函数.装饰器.迭代器.生成器,我们是如何使用生成器的.一个生成器能暂停执行并返回一个中间的结果这就是 yield 语句的功能 : 返回一个中间值给调用者并暂停执行. 我们的调用方式为yeild 1的方式,此方式又称为生成器的语句形式. 而使用生成器的场景:使用生成器最好的场景就

day05 协程函数,递归函数,匿名函数lambda,内置函数map reduce filter max min zip sorted,匿名函数lambda和内置函数结合使用,面向过程编程与函数编程,模块与包的使用,re模块内置函数

基础篇 本章大纲: 协程函数 递归函数 匿名函数lambda 内置函数map reduce filter  max min zip sorted 匿名函数lambda和内置函数结合使用 面向过程编程与函数编程 模块与包的使用 re模块内置函数 一,协程函数 注意:函数先定义,后使用.这是函数第一原则.函数主要分为定义,调用 1.1,什么是协程函数 协程函数特点:yield变为表达式,可以通过g.send(value)传值,用send传值时协程函数需要初始化,也可以说是生成器函数的一种 1.2,协

函数5—协程函数的有应用

协程函数的应用:找到一个文件夹下所有包含python字符串的文件的绝对路径为生成器函数添加初始化功能的装饰器import os ,timedef init(func): def wrapper(*args,**kwargs): res = func(*args,**kwargs) next(res) return res #返回初始化之后的生成器 return wrapper 下面的每一个函数都是一个生成器函数,可以接收生成器发送的值, 同时也是一个生成器,可以发送下面的函数想要的内容 可以实现

10.迭代器/生成器/协程函数/列表生成器

迭代器为什么要用迭代器?小结:生成器为什么要使用生成器,什么是生成器?如何创建一个生成器举个栗子:斐波拉契数列用yield返回结果的执行流程作业代码以及注释:协程函数面向过程编程作业以及代码注解:典型范例以及代码解析:列表生成式生成器表达式作业和练习 迭代器 为什么要用迭代器? 提供了一种不依赖索引的取值方式,使一些不具有索引属性的对象也能遍历输出 相比列表,迭代器的惰性计算更加节约内存. 但是它无法有针对性地指定取某个值,并且只能向后取值. >>> from collections i

Python 协程函数

1.1 协程函数理解 协程函数就是使用了yield表达式形式的生成器 def eater(name): print("%s eat food" %name) while True: food = yield print("done") g = eater("gangdan") print(g) 结果:generator object eater at 0x00000000028DC048这里就证明了g现在就是生成器函数 1. 2 协程函数赋值过程

python基础----迭代器、生成器、协程函数

一.什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前退) 2.可迭代对象:实现了迭代器协议的对象(如何实现:对象内部定义一个__iter__()方法) 3.协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具(如for循环,sum,min,max函数等)使用迭代器协议访问对象. 二,为什么要用迭代器 优点: 1:迭代器提供了一种不依赖于索引的取值方式,

python-学习 协程函数 模块与包

一.协程函数 yield的用法: 1:把函数的执行结果封装好__iter__和__next__,即得到一个迭代器2:与return功能类似,都可以返回值,但不同的是,return只能返回一次值,而yield可以返回多次值3:函数暂停与再继续运行的状态是有yield保存 1 # 例子1 2 # def chi(name): 3 # print('%s 开始上菜啦~'%name) 4 # cd=[] #菜单 5 # while True: 6 # food=yield cd 7 # cd.appen

python_递归_协程函数(yield关键字)_匿名函数_模块

协程函数(yield) 协程函数:生成器:yield关键字的另一种用法 例:装饰器自动初始化函数(生成器函数)deco 1 yield的语句形式: yield 1 2 #yield的表达式形式: x=yield 3 4 5 6 #协程函数 7 8 def deco(func): 9 def wrapper(*args,**kwargs): 10 res=func(*args,**kwargs) 11 next(res) 12 return res 13 return wrapper 14 15

Python之协程函数

Python之协程函数 什么是协程函数:如果一个函数内部yield的使用方法是表达式形式的话,如x=yield,那么该函数成为协程函数. def eater(name): print('%s start to eat food' %name) food_list=[] while True: food=yield food_list print('%s get %s ,to start eat' %(name,food)) food_list.append(food) print('done')