python生成器

生成器:是一个特殊的迭代器(迭代器的抽象层级更高)所以, 拥有迭代器的特性
1)惰性计算数据, 节省内存
2)能够记录状态, 并通过next()函数, 访问下一个状态
3)具备可迭代特性

创建方式
1)生成器表达式,把列表推导式的[] 修改成 ()

l = (i for i in range(1, 100) if i % 2 == 0)

print(l)
print(next(l))
print(next(l))
print(l.__next__())
#
for i in l:
    print(i)

#运行结果
<generator object <genexpr> at 0x000002467E1F48C8>
2
4
6
8

2)生成器函数,函数中包含 yield语句,这个函数的执行结果就是 "生成器"

# 生成器的创建方式2
# yied, 可以去阻断当前的函数执行, 然后, 当使用next()函数, 或者,     __next__(), 都会让函数继续执行,
# 然后, 当执行到下一个 yield语句的时候, 又会被暂停

def test():
    print("xxx")
    yield 1
    print("a")

    yield 2
    print("b")

    yield 3
    print("c")


g = test()
print(g)
print(next(g))
print(g.__next__())

#运行结果
<generator object test at 0x000001EB753548C8>
xxx
1
a
2

def test():
    print("xxx")
    yield 1
    print("a")

    yield 2
    print("b")

    yield 3
    print("c")

g = test()
for i in g:
    print(i)

#运行结果
xxx
1
a
2
b
3
c

send() 方法,send方法有一个参数,指定的是上一次被挂起的yield语句的返回值,相比于.next()可以额外的给yield 语句传值,注意第一次调用,t.send(None)
关闭生成器,g.close(),后续如果继续调用, 会抛出StopIteration异常
注意,如果碰到return,会直接终止, 抛出StopIteration异常提示,生成器只会遍历一次

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容