标签:执行 遍历 call ack mos int __next__ yield 文件
# 1,生成器的本质就是一个迭代器(生成器一定是迭代器,但迭代器不一定是生成器) --- generator object
# 2,只要含有yield关键字的就是一个生成器函数,生成器函数执行后得到一个生成器
# 3,yield只能在函数内部,且不能与return共用
# 生成器函数的特点:
1,调用生成器函数的时候不执行,只是生成一个生成器
2,生成器每次执行__next__()返回一个值,直到最后一个通过一个异常来停止
#实例1:
>>> def nihao():
print(‘a‘)
yield 1
print(‘b‘)
yield 2
print(‘c‘)
yield 3
print(‘d‘)
yield 4
>>> hello = nihao()
>>> hello.__next__() #对生成器进行遍历 每次都执行到一个yield,每次都会打印一个字母,有多少个yield就能进行多少次遍历
a
1
>>> hello.__next__()
b
2
>>>
>>> hello.__next__()
c
3
>>> hello.__next__()
d
4
>>> hello.__next__()
Traceback (most recent call last):
File "<pyshell#135>", line 1, in <module>
hello.__next__()
StopIteration
>>>
# 和直接使用for循环遍历效果一致
>>> for i in hello:
print(i)
a
1
b
2
c
3
d
4
实例2:
# 监听file文件,有新的打印就输出 yield 能实现逐行读取,return只能读取一次函数就结束了
def tail(filename):
f = open(filename)
while True:
line = f.readline()
if line.strip():
yield line.strip()
line = tail(‘file‘)
for i in line:
print(i)
标签:执行 遍历 call ack mos int __next__ yield 文件
原文地址:https://www.cnblogs.com/TestDeveloper/p/12462359.html