生成器是什么?有什么用?

欢迎来到我的CSDN技术博客!非常高兴能与你在Python的世界里相遇。无论你是刚接触代码的编程新手,还是寻求进阶的资深开发者,我都希望能通过这个小小的窗口,为你提供有价值的内容。


📝 关于本博客

这是一个专注于Python技术分享的原创社区。我会持续输出高质量的文章,帮助大家在数据科学、自动化及后端开发等领域共同成长。


💡 你将在这里看到什么?

为了让你快速了解本博客的定位,我将内容规划梳理为以下几个板块:

  • 🐍 Python基础夯实

    万丈高楼平地起。这里会有对核心语法、数据结构、常用内置库的深度解析,帮你扫除知识盲区,建立稳固的编程思维。

  • ⚙️ 实战与自动化

    理论终需落到实践。我会分享如何用Python爬取网络数据、办公自动化、开发效率脚本等实战案例,让代码真正为你工作。

  • 🤖 人工智能与数据科学

    聚焦热门领域,涵盖NumPy、Pandas等数据分析工具,以及机器学习、深度学习的基础原理与简单应用,带你领略AI的魅力。

  • 🔧 开发技巧与避坑指南

    "报错"是程序员的日常。我会总结开发中常见的Bug、实用的调试技巧以及代码优化方案,让你的开发之路走得更顺。


🤝 期待与你同行

编程是一场持续学习的旅程,这个博客将是我记录思考、分享经验的地方。

如果你对某篇文章有疑问,或是有想了解的技术方向,欢迎在评论区留言交流。你的每一次互动,都是对我最大的鼓励。

让我们从这里开始,一起探索Python的无限可能!

点个关注,不迷路。 让我们在技术的道路上,结伴而行,共同进步。

目录

一.yield语句

1.特点

2.举例

3.简化2的写法

二.实战:打印平方数

1.要求

2.写代码


一.yield语句

1.特点

有点像return,都是用来返回函数结果的,但是yield的特点是返回结果后,不会终止函数。

2.举例

python 复制代码
def hello():
    print("step 1")
    yield 1
    print("step 2")
    yield 2
    print("step 3")
    yield 3

g = hello()
res = next(g)
print(res)
res = next(g)
print(res)
res = next(g)
print(res)

运行结果如下:

说白了就是yield虽然会返回结果,但是不会终止函数。通过next()函数继续让生成器(本质就是函数,带yield语句的函数)往下执行。

3.简化2的写法

python 复制代码
def hello():
    print("step 1")
    yield 1
    print("step 2")
    yield 2
    print("step 3")
    yield 3

for res in hello():
    print(res)

原理:

这里的for循环,等价于下面的这段代码

python 复制代码
# 1. 先创建生成器对象
gen = hello()

# 2. 手动模拟 for 循环
while True:
    try:
        # 获取下一个 yield 的值
        res = next(gen)
        # 打印这个值
        print(res)
    except StopIteration:
        # 生成器没有 yield 了,退出循环
        break

运行结果如下:

解读代码:

yield 让函数变成可暂停的,每次 for 循环就让它从暂停处恢复,跑到下一个 yield,并把这个 yield 的值给循环变量。

二.实战:打印平方数

1.要求

我们需要定义一个函数,往函数中传入n(比如5),那么此时这个函数需要依次打印0~4(共5个数字)的平方数。

举例:当n=5,函数输出的结果应该是0, 1, 4, 9, 16

2.写代码

python 复制代码
def squares(count:int):
    for n in range(count):
        yield n**2

for num in squares(5):
    print(num)

代码解析:

①range(n):生成一个可迭代对象,范围是0 ~ n-1

举例:range(5)的可迭代对象范围是0~4

②**for 循环会自动帮你不断 next(),每次拿到 yield 的值就赋值给循环变量(此时是num),直到生成器耗尽。**
运行结果

以上就是本篇文章的全部内容,喜欢的话可以留个免费的关注呦~~~

相关推荐
被AI抢饭碗的人4 小时前
C++过渡Python
开发语言·python
m0_733565464 小时前
golang如何使用Wails开发桌面应用_golang Wails桌面应用开发步骤
jvm·数据库·python
迪霸LZTXDY5 小时前
U-NET模型训练--图像标注脚本工具
开发语言·python
码界筑梦坊5 小时前
119-基于Python的各类企业排行数据可视化分析系统
开发语言·python·信息可视化·数据分析·毕业设计·echarts·fastapi
习明然5 小时前
记录下解决Python在windows 2008 Server 无法启动
开发语言·windows·python
duke8692672145 小时前
C# 文件上传的服务器端加密 C#如何在存储到S3或Azure Blob时启用加密
jvm·数据库·python
SOC罗三炮5 小时前
Hermes Agent v0.14.0:不用装 WSL 了,Windows 原生支持来了(Early Beta)
python
用户78937733908535 小时前
前端转后端生存指南(中):化身架构师,用 ORM 魔法掌控数据库
后端·python
༒࿈南林࿈༒5 小时前
某川数据接口逆向、SM系列国密算法
python·js逆向·国密(sm系列)
ftpeak5 小时前
LangGraph Agent 开发指南(10~子图 Subgraphs)
python·ai·langchain·ai编程·langgraph