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的返回值没有类型 ...
随机推荐
- 【BZOJ】1011: [HNOI2008]遥远的行星(近似)
http://www.lydsy.com/JudgeOnline/problem.php?id=1011 题意:$f[i] = \sum_{j=1}^{i-1} \frac{M[i]M[j]}{i-j ...
- 通过/proc/sys/net/ipv4/优化Linux下网络性能
通过/proc/sys/net/ipv4/优化Linux下网络性能 /proc/sys/net/ipv4/优化1) /proc/sys/net/ipv4/ip_forward该文件表示是否打 ...
- Zabbix-3.0.0 安装Graphtree
导读 Zabbix中,想要集中展示图像,唯一的选择是screen,后来zatree解决了screen的问题,但性能不够好.Graphtree 由OneOaaS开发并开源出来,用来解决Zabbix的图形 ...
- 【BZOJ3289】Mato的文件管理 莫队算法+树状数组
[BZOJ3289]Mato的文件管理 Description Mato同学从各路神犇以各种方式(你们懂的)收集了许多资料,这些资料一共有n份,每份有一个大小和一个编号.为了防止他人偷拷,这些资料都是 ...
- iOS 界面翻转切换动画
[UIView beginAnimations:nil context:NULL]; [UIView setAnimationCurve:UIViewAnimationCurveLinear]; [ ...
- 160303、js加密跟后台加密对应
md5.js var hexcase = 0; var b64pad = ""; var chrsz = 8; function hex_md5(s){ return binl2h ...
- Java操作文件转码
package downloadTest; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.F ...
- JAVA基础之JDBC开发、JSTL语法、EL表达式与数据分页
一.直接使用JDBC开发的问题 1.当表中的列很多时,需要写很长的SQL语句 还需要写大量 setXXX() 设置参数语句 读取数据时还需要写大量setXXXX()设置属性语句 2.非常容易出错,而且 ...
- Hibernate中的一些关键字理解
ORM的理解: ORM(Object/Relation Mapping): 对象/关系映射ORM 主要解决对象-关系的映射: ORM的思想:将关系数据库中表中的记录映射成为对象,以对象的形式展现,程序 ...
- HAPROXY简介
HAProxy 是一款高性能TCP/HTTP 反向代理负载均衡服务器,具有如下功能: 根据静态分配的cookies完成HTTP请求转发 在多个服务器间实现负载均衡,并且根据HTTP cookies 实 ...