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的返回值没有类型 ...
随机推荐
- linux -- ubuntuserver 安装图形界面
安装Gnome桌面 1.安装全部桌面环境,其实Ubuntu系列桌面实际上有几种桌面应用程序,包括Ubuntu-desktop.Kubunut-desktop和Xubuntu- desktop. 我们就 ...
- iOS音频播放 (三):AudioFileStream 转
原文出处 :http://msching.github.io/blog/2014/07/09/audio-in-ios-3/ 前言 本来说好是要在第三篇中讲AudioFileStream和AudioQ ...
- win7下cmake编译opencv2.3.1生成opencv—createsamples.exe和opencv_haartrainingd.exe
第一步:下载安装cmake,之后进行默认安装即可,这步略过. 第二步:配置cmake ,使cmake找到opencv进行编译安装 watermark/2/text/aHR0cDovL2Jsb2cuY3 ...
- OEM无法启动:oracle/product/10.2.0/dbhome_1/oc4j/j2ee/OC4J_DBConsole_localhost.localdomain_orcl not found.
配置OEM环境变量 ORACLE_UNQNAME=$ORACLE_SID 要想打开OEM的web管理程序,必须先启动Database listener,再启动Datebase Control端口监控程 ...
- C语言逻辑运算符
现在假设有这样一种情况,我们的软件比较特殊,要求使用者必须成年,并且成绩大于等于60,该怎么办呢? 或许你会想到使用嵌套的 if 语句,类似下面这样的代码: #include <stdio.h& ...
- SQL 语句快速参考
来自 W3CSchool 的 SQL 快速参考 SQL 语句 语法 AND / OR SELECT column_name(s)FROM table_nameWHERE conditionAND|OR ...
- eclipse控制台不限制显示的行数
在Preferences中搜索Console,设置Limit console output没有限制即可.
- spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件)
关键字:spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件) 应用场景:很多时候我们想要在某个类加载完毕时干某件事情,但是使用了spring管理对象,我们这个类引用 ...
- 简单的纯css重置input单选多选按钮的样式--利用伪类
由于input单选多选的原生样式通常都不符合需求,所以在实现功能时通常都需要美化按钮 html <input type="radio" /> <input typ ...
- 虚拟机VMWare安装苹果系统MacOS详细教程(联网设置,全屏插件、文件互传)
运行环境: VMware® Workstation 12 Pro(自行安装,或者用这个) 推荐(下面以10.11.6版本做的教程,但是安装时推荐使用此版本安装然后升级到10.11.6):MacOS X ...