码迷,mamicode.com
首页 > 编程语言 > 详细

生成器(Python3)

时间:2020-03-11 15:47:55      阅读:68      评论:0      收藏:0      [点我收藏+]

标签:执行   遍历   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)

 

生成器(Python3)

标签:执行   遍历   call   ack   mos   int   __next__   yield   文件   

原文地址:https://www.cnblogs.com/TestDeveloper/p/12462359.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!