http://www.pythonclub.org/python-basic/yield
例1 yield的应用:
def addlist(alist):
for i in alist:
yield i+2
alist = [1,2,3,4]
for x in addlist(alist):
#对alist的每个list数据进行i+2操作
print x输出结果:
3
4
5
6
例2.next的应用:
def h():
print 'hello'
yield 5
print 'word'
![]()
c = h()
#执行到yield处
c.next()
print 'flag'
#因为后面没有yield了,而导致程序出错
c.next()
输出结果:
hello
flag
word
Traceback (most recent call last):
File "test.py", line 9, in <module>
c.next()
StopIteration
例3.next和send的不同
#coding:utf8
def h():
print 'hello'
m = yield 5
print m
d = yield 12
print 'word'
![]()
c = h()
#c.next()相当于c.send(None)
c.next()
print 'flag'
#(yield 5)被赋值了,yield接收了send的值
c.send('!')例4.next和send的返回值
#coding:utf8
def h():
print 'hello'
m = yield 5
print m
d = yield 12
print 'word'
![]()
m = c.next()
print 'flag'
d = c.send('!')
#m,d的值为5,12可见send和next的返回值就是yield的参数
print m,d
![]()
![]()
yield 用法说明
yield 简单说来就是一个生成器,生成器是这样一个函数,它记住上一次返回时在函数体中的位置。对生成器函数的第二次(或第 n 次)调用跳转至该函数中间,而上次调用的所有局部变量都保持不变。
-
生成器 是 一个函数
函数的所有参数都会保留
-
第二次调用 此函数 时
使用的参数是前一次保留下的.
-
生成器还“记住”了它在流控制构造
生成器不仅“记住”了它数据状态。 生成器还“记住”了它在流控制构造(在命令式编程中,这种构造不只是数据值)中的位置。由于连续性使您在执行框架间任意跳转,而不总是返回到直接调用者的上下文(如同生成器那样),因此它仍是比较一般的。
yield 生成器的运行机制
当你问生成器要一个数时,生成器会执行,直至出现 yield 语句,生成器把 yield 的参数给你,之后生成器就不会往下继续运行。 当你问他要下一个数时,它会从上次的状态开始运行,直至出现yield语句,把参数给你,之后停下。如此反复直至退出函数。
下面借助几个例子来理解yield:例1 yield的应用:











例2.next的应用:











输出结果:







例3.next和send的不同






























SunRise_at 2012-12-27 12:04 发表评论