Python3学习笔记----生成器

生成器的作用

生成器可以在循环的过程中推算出后续的元素,不必创建完整的list,从而节省大量空间。

生成器的创建

1.把一个列表生成式的 [ ] 改写为( )

# -*- coding: UTF-8 -*-
gen= (x * x for x in range(10))
print(gen)

输出结果不是一个列表而是返回了一个生成器对象:

<generator object <genexpr> at 0x00000190FA193AF0>

2.使用了yield,以函数的形式实现生成器

# -*- coding: UTF-8 -*-
def my_function():
    for i in range(10000):
        yield i

f=my_function()
print(f)

输出的结果同样是返回了一个生成器对象

<generator object my_function at 0x0000017A6A213BA0>

遍历生成器

1.直接使用next()调用

# -*- coding: UTF-8 -*-
def generator():
    print ( 'step 1' )
    yield ( "hello" )
    print ( 'step 2' )
    yield ( "world" )
    print ( 'step 3' )
    yield ( "!" )

o = generator()

# next() 函数遍历迭代器
while True :
    try :
        print( next( o ) )
    except StopIteration :
        break

生成器函数在每次调用next的时候执行,遇到yield语句暂停保存当前所有的运行信息返回yield的值0,再次执行时从上次返回的yied语句处继续向下顺序执行,在yield掉所有的值后,next()会触发一个StopIteration的异常。
输出结果

step 1
hello
step 2
world
step 3
!

2.使用for循环遍历生成器

# -*- coding: UTF-8 -*-
def my_function():
    for i in range(10000):
        yield i

for i in my_function():
    print(i)

for循环会自动捕捉到StopIteration异常并停止调用next()。

posted @   yukinim  阅读(149)  评论(0编辑  收藏  举报
编辑推荐:
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
阅读排行:
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 超详细,DeepSeek 接入PyCharm实现AI编程!(支持本地部署DeepSeek及官方Dee
· 用 DeepSeek 给对象做个网站,她一定感动坏了
· .NET 8.0 + Linux 香橙派,实现高效的 IoT 数据采集与控制解决方案
· .NET中 泛型 + 依赖注入 的实现与应用
点击右上角即可分享
微信分享提示