什么是yield
原文:What does the “yield” keyword do?
译文:Python关键字yield的解释
可迭代对象(iteration)
可以利用for...in...
语句进行迭代的everything,比如列表,字符串等。
>>>mylist = [1,2,3]
>>>for i in mylist:
... print(i)
1
2
3
>>>mylist = [x*x for x in range(3)]
>>>for i in mylist:
... print(i)
... print(i)
0
1
4
0
1
4
example2
有两个迭代对象,一个是range(3),一个是mylist。
生成器(Generators)
生成器也是可迭代的,但只能迭代一次,且不是所有的值都存在内存中。看起来是将()
换成[]
,迭代一次之后就失效了。
>>>mygenerator = (x*x for x in range(3))
>>>for i in mygenerator:
... print(i)
... print(i)
0
1
4
yield
yield首先是个关键词,类似于return,返回的是个生成器。
>>> def createGenerator():
... mylist = range(3)
... for i in mylist:
... yield i*i
首先
迭代列表中的三个值,然后
返回值为i*i
的生成器,大小和列表一样。
笔记
def read_input(file):
for line in file:
yield line.rstrip()
遇到的这个代码,首先是从文件中读取内容,然后遍历每一行,返回line.rstrip()
的值到生成器中,生成器的大小是文件的行数。
其中rstrip()
是返回该行删除 string 字符串末尾后的指定字符(默认为空格)。
str = " this is string example....wow!!! ";
print str.rstrip();
str = "88888888this is string example....wow!!!8888888";
print str.rstrip('8');
输出:
this is string example....wow!!!
88888888this is string example....wow!!!