#转自https://www.jianshu.com/c/00c61372c46a网址
#生成器也是函数,只是常规函数通过return返回一个值,而生成器可以通过yield返回很多中间结果。
def mygen():
yield 'hello'
a = 10 + 20
yield a
yield [1, 2, 3]
if __name__ == '__main__':
m = mygen()
for i in m:
print(i)
for i in m:
print(i) # 无值,因为生成器对象只能用一次
#生成器实例:每次取出文件的10行内容
def blocks(fobj):
block = []
counter = 0
for line in fobj:
block.append(line)
counter += 1
if counter == 10:
yield block # 返回中间结果,下次取值,从这里继续向下执行
block = []
counter = 0
if block: # 文件最后不够10行的部分
yield block
if __name__ == '__main__':
fobj = open('/tmp/passwd') # cp /etc/passwd /tmp
for lines in blocks(fobj):
print(lines)
print()
fobj.close()