python 生成器 yield
  X5zJxoD00Cah 2023年11月02日 27 0

生成器属于迭代器

https://mp.weixin.qq.com/s/F3GLVY2EUpISpt_koCDmWg

生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。调用一个生成器函数,返回的是一个迭代器对象。

迭代器 for __next__

生成器 return yield

'''generator(生成器)'''
# https://mp.weixin.qq.com/s/F3GLVY2EUpISpt_koCDmWg

# 最简单的创建一个生成器的方式,只要把一个列表生成式的 [] 改成 () ,就创建了一个generator:
(x*2 for x in range(10))

# 生成器(generator)能够迭代的关键是它有一个next()方法,工作原理就是通过重复调用next()方法,直到捕获一个异常
g = (x for x in range(3)) # [0:3)
g.__next__()
# 第二种方法就是, 如果一个函数中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator
# 调用函数就是创建了一个生成器(generator)对象。
def gen_example():
    print ('第1次执行啦~,还没到第一个yield!')
    yield '我是第1个遇见的yield,你遇到我就要返回'
    
    print ('第2次执行啦~,还没到第二个yield')
    yield '我是第2个遇见的yield,你遇到我就要返回'
    
    print ('第3次执行啦,我运行完 函数就执行完毕啦~')


for i in gen_example():
    print(i)
    print("\n--------分割线--------\n")
def evenNumber(max):
    n = 0
    while n < max:
        yield n
        n += 1
        
for i in evenNumber(3):
    print(i)


[ i for i in evenNumber(3) ]
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  X5zJxoD00Cah   2023年12月11日   26   0   0 知乎Python迭代器
X5zJxoD00Cah