生成器(Python3)

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

猜你喜欢

转载自www.cnblogs.com/TestDeveloper/p/12462359.html