博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
yield的表达式形式的应用(待补充)
阅读量:5038 次
发布时间:2019-06-12

本文共 1579 字,大约阅读时间需要 5 分钟。

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))

输出结果:

startNone---------------------------value: 1None---------------------------value: 2None---------------------------value: NoneNone

 

转载于:https://www.cnblogs.com/z-x-y/p/10061916.html

你可能感兴趣的文章
ps基础入门快捷方法总结
查看>>
摸索出来的文字居中 定位后怎么都不居中,,
查看>>
数据库索引
查看>>
VS 自带Git使用教程
查看>>
iOS ReactiveCocoa简单使用笔记
查看>>
[TCP/IP]TCP的三次握手和四次挥手
查看>>
python中交换两个值的方法
查看>>
软件开发中对架构、构架、结构、框架的理解
查看>>
JAVA通信系列一:Java Socket技术总结
查看>>
VS 2010打开设计器出现错误
查看>>
SQLServer 镜像功能完全实现
查看>>
Vue-详解设置路由导航的两种方法
查看>>
一个mysql主从复制的配置案例
查看>>
大数据学习系列(8)-- WordCount+Block+Split+Shuffle+Map+Reduce技术详解
查看>>
dvwa网络渗透测试环境的搭建
查看>>
Win8 安装VS2012 和 Sql Server失败问题
查看>>
过点(2,4)作一直线在第一象限与两轴围成三角形,问三角形面积的最小值?...
查看>>
java aes CBC的填充方式发现
查看>>
使用ionic cordova build android --release --prod命令打包报有如下错误及解决方法
查看>>
BZOJ 2338 HNOI2011 数矩形 计算几何
查看>>