python generator next send
*******oi********oi********oi
上面 * 符号 代表 一系列的代码, oi 代表 一个 【yield】关键字引出的 【数据交换,称之为 oi 】
在一个有【yield】的 function 里:
在出现【yield】的地方有一个【oi】的过程,为什么不是【io】呢,因为它就是先【o】再【i】的。
【o】代表从 generator 里出来一个 value。
【i】代表 generator 从外界收到一个 value。
一般,在外界可以使用 next 或者 send。
一开始,generator 停在 function 开始的地方。就像这样(【】这个符号代表指令执行的位置):
【】**********oi*********oi**********oi
然后,第一次必须用 next 来让 generator 走到【o】的位置,也就是说,这个时候 generator 已经送出一个 value 了。
不过,这个时候【i】却还没有被执行。就像这样:
**********【o】i*********oi**********oi
你如果继续使用 next ,可以,并且你会得到这样的:
**********oi*********【o】i**********oi
也就是说,你的 generator 已经到了第二个【o】的地方,已经送出了第二个 value,并且在第一个【i】的时候,这个 generator 已经被送入了一个 None value。也就是说,使用 next 只能往这个 generator 里面送入一个 None value。
这个时候,你换 send,例如 gen.send(1)。 会变成这样:
**********oi*********oi**********【o】i
你的 generator 停在了第三个【o】的地方,注意是已经执行过这【第三个o了】。而且,你送入了一个整型 value 1,注意,是送给了第二个【i】。
python generator next send的更多相关文章
- python generator与coroutine
python generator与coroutine 协程 简单介绍 协程,又称微线程,纤程,英文名Coroutine.协程是一种用户态的轻量级线程,又称微线程.协程拥有自己的寄存器上下文和栈,调度 ...
- Python:generator的send()方法流程分析
先来一个简单地例子: def foo(): print('starting') while True: r = yield 2 print(r) f = foo() print(f.send(None ...
- python, generator.next()和send()
对于普通的生成器,第一个next调用,相当于启动生成器,会从生成器函数的第一行代码开始执行,直到第一次执行完yield语句(第4行)后,跳出生成器函数. 然后第二个next调用,进入生成器函数后,从y ...
- Python generator和yield介绍
Python生成器(generator)并不是一个晦涩难懂的概念.相比于MetaClass和Closure等概念,其较为容易理解和掌握.但相对于程序结构:顺序.循环和分支而言其又不是特别的直观.无论学 ...
- Python的生成器send()方法 & yield_from
生成器对象是一个迭代器.但是它比迭代器对象多了一些方法,它们包括send方法,throw方法和close方法.这些方法,主要是用于外部与生成器对象的交互.本文先介绍send方法. send send方 ...
- python generator: next , sent(msg)区别
对于普通的生成器,第一个next调用,相当于启动生成器,会从生成器函数的第一行代码开始执行,直到第一次执行完yield语句(第4行)后,跳出生成器函数. 然后第二个next调用,进入生成器函数后,从y ...
- python generator用法
转自:https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/0013868196510 ...
- Python: generator, yield, yield from 详解
1.Generator Expressions 生成器表达式是用小括号表示的简单生成器标记法: generator_expression ::= "(" expression co ...
- [Python] Use a Python Generator to Crawl the Star Wars API
In this lesson, you will be introduced to Python generators. You will see how a generator can replac ...
随机推荐
- ASP.NET SignaiR 实现消息的即时推送,并使用Push.js实现通知
一.使用背景 1. SignalR是什么? ASP.NET SignalR 是为 ASP.NET 开发人员提供的一个库,可以简化开发人员将实时 Web 功能添加到应用程序的过程.实时 Web 功能是指 ...
- 工行ICBC_WAPB_B2C支付接口
一. 前期准备 手机银行(WAP)B2C在线支付接口说明V1.0.0.6.doc 手机银行移动生活商户及门户网站js接口API.doc 支付组件ICBCEBankUtil.dll和infosecapi ...
- [修正] Firemonkey TFrame 存档后,下次载入某些事件连结会消失(但源码还在)
问题:Firemonkey TFrame 存档后,下次载入某些事件连结会消失(但源码还在) 解决:(暂时方法) type TTestFrame = class(TFrame) public const ...
- Nginx学习笔记--001-Nginx快速搭建
Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.Nginx是由Igor Sysoev为俄罗斯访问量第二的R ...
- css样式之border
border用法详解: 1.border-width 属性设置边框的宽度 可能的值:像素 2.border-style 属性设置边框的样式 可能的值:solid(直线),dashed(虚线),dott ...
- Android 解析XML文件和生成XML文件
解析XML文件 public static void initXML(Context context) { //can't create in /data/media/0 because permis ...
- Angular2学习笔记——在子组件中拿到路由参数
工作中碰到的问题,特此记录一下. Angular2中允许我们以`path\:id\childPath`的形式来定义路由,比如: export const appRoutes: RouterConfig ...
- Linux 系统中发博客必备的五大图片处理神器
发博客时,总免不了要用图片说话.经过长时间的磨合,在 Linux 桌面系统下有几款图片处理软件我已经用得比较顺手了.这几款软件在 Linux 世界使用广泛,各个 Linux 发行版的软件仓库中都有自带 ...
- .NET开发邮件发送功能的全面教程(含邮件组件源码)
今天,给大家分享的是如何在.NET平台中开发“邮件发送”功能.在网上搜的到的各种资料一般都介绍的比较简单,那今天我想比较细的整理介绍下: 1) 邮件基础理论知识 2) ...
- git 行动指南
Git是一个分布式的版本管理工具. 在本地项目和服务器都会拥有版本库,本地版本库由自己控制,自由选择提交代码到服务器端 windows上也建议使用命令的方式来使用git,推荐使用客户端 :http:/ ...