python 3 协程函数

1:把函数的执行结果封装好__iter__和__next__,即得到一个迭代器

2:与return功能类似,都可以返回值,但不同的是,return只能返回一次值,而yield可以返回多次值

3:函数暂停与再继续的状态是由yield保存的

 def func(count):

    print('start')

    while True:

        yield count

        count+=1

g=func(10)

print(next(g))

print(next(g))

使用了yield表达式形式

def eater(name):

    print('%s 说:我开车啦' %name)

    while True:

        food=yield   #默认返回为空,实际上为x=yield None

        print('%s eat %s' %(name,food))

alex_g=eater('alex')

print(alex_g)

结果:

generator object eater at 0x000000000271B200

alex 说:我开车啦

yield表达式形式要先运行next(),让函数初始化并停在yield,相当于初始化函数,然后再send() ,send会给yield传一个值 ** next()和send() 都是让函数在上次暂停的位置继续运行,next是让函数初始化,send在触发下一次代码的执行时,会给yield赋值

 def eater(name):

    print('%s 说: 我开动啦' %name)

    food_list=[]

    while True:

        food=yield  food_list

        food_list.append(food)  # ['骨头','菜汤']

        print('%s eat %s ' % (name,food))

alex_g=eater('alex')

next(alex_g)  #让函数初始化,等同于alex_g.send(None)

# next(alex_g)  #让函数初始化,等同于alex_g.send(None) 如果注释这行运行时会报错: TypeError: can't send non-None value to a just-started generator

#第二阶段:给yield传值

print(alex_g.send('骨头')) # #1 先给当前暂停位置的yield传骨头 2 继续往下执行,直到再次碰到yield,然后暂停并且把yield后的返回值当做本次调用的返回值

print(alex_g.send('肉包子'))

print(alex_g.send('菜汤'))

使用装饰器初始化

 def init(func):
def wrapper(*args,**kwargs):
res = func(*args,**kwargs)
next(res) # 初始化next操作,
return res
return wrapper
@init
def eater(name):
print('%s 说: 我开动啦' %name)
food_list=[]
while True:
food=yield food_list
food_list.append(food)
print('%s eat %s ' % (name,food)) g = eater('alex')
print(g.send('骨头'))

python 3 协程函数的更多相关文章

  1. Python之协程函数

    Python之协程函数 什么是协程函数:如果一个函数内部yield的使用方法是表达式形式的话,如x=yield,那么该函数成为协程函数. def eater(name): print('%s star ...

  2. Python基础(协程函数、内置函数、递归、模块和包)-day05

    写在前面 上课第五天,打卡: 凭着爱,再回首: 一.协程函数(生成器:yield的表达式形式) 1.yield 的语句形式: yield 1 - 这种方式在 Python基础(函数部分)-day04  ...

  3. python之协程函数、递归、二分法

    一.协程函数: 协程函数的语法: def eater(name): print('%s说:我开动啦' %name) food_list=[] while True: food=yield food_l ...

  4. python基础-协程函数、递归、模块、包等内容

    1. 协程函数 1.1 yield基本用法 yield作用 1.把函数的执行结果封装好,即封装__iter__和__next__,即得到一个迭代器 2.与return功能类似,都可以返回值,但不同的是 ...

  5. python自动化 协程函数、二分查找、模块搜索

    协程函数 yiled: 把函数的执行结果封装好__iter__和__next__得到一个迭代器 与return功能类似,都可以返回值,但是return只能返回一次只 def fun(count): p ...

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

    目录: 协程函数(yield生成器用法二) 面向过程编程 递归 匿名函数与内置函数的使用 模块 包 常用标准模块之re(正则表达式) 一.协程函数(yield生成器用法二) 1.生成器的语句形式 a. ...

  7. python基础之协程函数、列表表达式、生成器表达式

    一.协程函数 协程函数的定义?如果在一个函数内部yield的使用方式是表达式形式的话,如x=yield,那么该函数称为协程函数 协程函数补充: def init(func): def wrapper( ...

  8. python基础----迭代器、生成器、协程函数及应用(面向过程实例)

    一.什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前退) 2.可迭代 ...

  9. python协程函数应用 列表生成式 生成器表达式

    协程函数应用 列表生成式 生成器表达式   一.知识点整理: 1.可迭代的:对象下有_iter_方法的都是可迭代的对象 迭代器:对象._iter_()得到的结果就是迭代器 迭代器的特性: 迭代器._n ...

随机推荐

  1. jm解决乱码问题-参数化-数据库操作-文件上传下载

    jm解决乱码问题-参数化-数据库操作-文件上传下载 如果JM出果运行结果是乱码(解决中文BODY乱码的问题) 找到JM的安装路径,例如:C:\apache-jmeter-3.1\bin 用UE打开jm ...

  2. C#利用SharpZipLib解压或压缩文件(支持多层目录递归压缩)

    需要下载ICSharpCode.SharpZipLib.dll using System; using System.Collections.Generic; using System.Linq; u ...

  3. 让 webpack 加载 Source Map

    在浏览器中运行的 JavaScript 代码都是编译器输出的代码,这些代码的可读性很差.如果在开发过程中遇到一个不知道原因的 Bug,则你可能需要通过断点调试去找出问题. 在编译器输出的代码上进行断点 ...

  4. java游戏开发基础Swing之JRadioButton

    © 版权声明:本文为博主原创文章,转载请注明出处 1.按钮(JButton) Swing中的按钮是JButton,它是javax.swing.AbstractButton类的子类,Swing中的按钮可 ...

  5. android学习笔记(3)Button控件的学习

    一,增加一个button并用外部类绑定事件 //XML文件: <Button android:id="@+id/button1" android:layout_width=& ...

  6. [译]GLUT教程 - 整合代码5

    Lighthouse3d.com >> GLUT Tutorial >> Extras >> The Code So Far V 该代码与位图字体的代码类似.区别是 ...

  7. BFS 和 DFS

    DFS用到递归,BFS要用到一个辅助队列 #include "stdafx.h" #include<iostream> #include<vector> # ...

  8. oracle 累加功能,累加百分比

    最近做数据分析,需要用到累加功能,发现强大的oracle还真有,用over(order by field) 例子: 数据表中最后一列就是累加的效果 累加sql: select t.acc_pedal_ ...

  9. 【Mac系统 + Git】之上传项目代码到github上以及删除某个文件夹

    之前做开发的时候,用过一段时间git代码管理工具,用命令行操作感觉十分高大上,今天我想从头总结一篇Mac系统下如何利用git上传代码到github上的学习. 目录 一.安装Git 二.创建.ssh文件 ...

  10. hihoCoder #1388 : Periodic Signal

    NTT (long long 版) #include <algorithm> #include <cstring> #include <string.h> #inc ...