yield的表达式形式的应用(待补充)
1、yield的表达式形式应用的定义:
在一个生成器函数内,将yield赋值给一个变量,这就是yield的表达式形式。也叫生成器的表达式形式
2、send方法的定义:
(1)定义:
yield的表达式形式下面有一个send方法,它的作用与next方法是一样的,都是在触发函数继续往下走。除了具有next的功能外,还具有传值的效果。send传值的方式是先把要传的值交给yield,再由yield赋值给事先定义的变量名,最后才触发next效果.
def foo():
print('start')
while True:
x=yield
print('value:',x)
g=foo()#得到一个生成器
next(g)#初始化生成器,实际上已经开始执行函数了,打印start,遇到yield暂停
g.send(1)#send先将1传给上一次yield暂停的位置,再由yield把'1'赋值给x,最后函数再接着往下走,直到碰到yield函数才暂停 #start
#value:1
(2)补充:
send(None):把None传给yield,相当于不传值,只有next效果,等同于'next(生成器变量)',一般用于生成器变量的初始化操作
3、yield表达式形式的初始化
定义:
生成器一定要走到一个暂停的位置,然后才能send传值,因为send的特性是基于一个已经暂停的yield进行传值然后再接着往下走
如果对生成器表达式形式不进行初始化操作而直接进行传值则会报以下错误:
TypeError: can't send non-None value to a just-started generator(无法将非None值发送到刚启动的生成器)
解决方法:所以必须先send一个None给生成器表达式形式或next(g)
例一:
先传一个None给生成器,否则直接报错
def foo():
print('start')
while True:
x = yield
print('value:',x) g = foo() # 得到生成器 print(g.send(None)) # g.send(None)一般用于初始化生成器。
# 它传了一个空值给函数,相当于直接执行了next(g)
# 如果不初始化则会报以下错误:
# TypeError: can't send non-None value to a just-started generator print('---------------------------')
print(g.send(1)) # 先将数字1传给yield,,再执行next(g),所以打印函数返回值的结果还是None。
print('---------------------------')
print(g.send(2)) # 先将数字2传给yield,,再执行next(g),所以打印函数返回值的结果还是None。
print('---------------------------')
print(next(g))
输出结果:
start
None
---------------------------
value: 1
None
---------------------------
value: 2
None
---------------------------
value: None
None
yield的表达式形式的应用(待补充)的更多相关文章
- yield的表达式形式与内置函数
yield的功能: 1. 与return类似,都可以返回值,不一样在于,yield可以返回多个值而且可暂停,再次执行可继续下一步操作,return到了就停止不在继续运行. 2.为封装好的的函数能够使用 ...
- yield的表达式形式、面向过程编程(grep -rl 'root' /etc)
一.yield的表达形式 def foo(): print('starting') while True: x=yield None#return 2 print('value :',x) g=foo ...
- Python开发基础-Day10生成器表达式形式、面向过程编程、内置函数部分
生成器表达式形式 直接上代码 # yield的表达式形式 def foo(): print('starting') while True: x=yield #默认返回为空,实际上为x=yield No ...
- python基础之生成器表达式形式、面向过程编程、内置函数部分
生成器表达式形式 直接上代码 1 # yield的表达式形式 2 def foo(): 3 print('starting') 4 while True: 5 x=yield #默认返回为空,实际上为 ...
- python函数式编程之yield表达式形式
先来看一个例子 def foo(): print("starting...") while True: res = yield print("res:",res ...
- Python基础(9)_生成器(yield表达式形式)、面向过程编程
一.yield表达式形式 1 #装饰器,初始化含yield表达式的生成器 def init(func): def wrapper(*args,**kwargs): g=func(*args,**kwa ...
- python3 yield表达式形式应用
我们已知: 生成器函数:函数体内包含有yield关键字,该函数执行的结果是生成器 yield的功能: 1.与return类似,都可以返回值,但不一样的地方在于yield返回多次值,而return只能返 ...
- day22 yield的表达式的应用,面向过程编程,内置函数前几个
Python之路,Day10 = Python基础10 生成器表达式: (i for i in range(10) if i > 5)os.walk(r'文件路径')返回一个迭代器, 第一次ne ...
- day3_python之函数返回值、语句形式、表达式形式
一. 函数对象 1. 函数是第一类对象,即函数可以当作数据传递 #1 可以被引用 #2 可以当作参数传递 #3 返回值可以是函数 #3 可以当作容器类型的元素 二.返回值 return的返回值没有类型 ...
随机推荐
- mac zsh选择到行首的快捷键
Mac OS X 下zsh切换窗口的快捷键:Shift-Command-←. 移动到当前命令行的行首,使用快捷键[Ctrl][A].移动到当前命令行的行尾,使用快捷键[Ctrl[E].
- 怎样使用DWZ?
首先说明,这篇文章不是解说DWZ内部实现原理的,也不打算分析它的源代码,这里仅仅是演示一下,怎样将DWZ框架整合到项目中去. 刚刚过去的项目中,前台UI使用的是DWZ.因为之前项目的开发环境都已经搭建 ...
- handlebars Helper用法
handlebars Helper用法: http://www.cnblogs.com/iyangyuan/archive/2013/12/12/3471357.html 逻辑运算符在handle ...
- 3698: XWW的难题[有源汇上下界最大流]
3698: XWW的难题 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 354 Solved: 178[Submit][Status][Discus ...
- 逐一取Map值
String[] mKeys = starDetil.getRows().keySet().toArray(new String[starDetil.getRows().size()]); starD ...
- Myeclipse中js总是报错
1.右键选择 MyEclipse-->Exclude From Validation .2.再右键选择 MyEclipse-->Run Validation 即可.
- 巨蟒python全栈开发-第11阶段 devops-git入门1
大纲 1.git命令初识 2.git reset与diff 3.git区域总结 4.git 远程仓库 5.git stash 1.git命令初识 2.git reset与diff 3.git区域总结 ...
- linux tree命令以树形结构显示文件目录结构
http://jingyan.baidu.com/article/acf728fd19c7eff8e510a3eb.html winscp 传递文件到ubuntu上用winscp
- Open 常用开源
msdn:https://msdn.microsoft.com/zh-cn codeplex:https://www.codeplex.com/ gotdotnet:http://www.gotdot ...
- 【Python之路】Python目录
Python基础1 -- Python由来.Python种类.编码方式, Python基础2 -- Python运算符.数据类型.enumerate.range.for循环 python基础3 -- ...