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

欢迎来到我的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),直到生成器耗尽。**
运行结果

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

相关推荐
岱宗夫up1 小时前
FastAPI进阶3:云原生架构与DevOps最佳实践
前端·python·云原生·架构·前端框架·fastapi·devops
~央千澈~1 小时前
抖音弹幕游戏开发之第15集:添加配置文件·优雅草云桧·卓伊凡
java·前端·python
进阶的鱼1 小时前
一文了解RAG———检索增强生成
人工智能·python·ai编程
测试工坊1 小时前
Android 内存采集避坑指南:一个命令 5ms,一个命令 15 秒,你选哪个?
python
JaydenAI1 小时前
[拆解LangChain执行引擎]回到过去,开启平行世界[上篇]
python·langchain
datalover2 小时前
spring security自定义表结构处理
数据库·python·spring
励ℳ2 小时前
【生信绘图】基因组大小与CDS数量关系的可视化
python·信息可视化
喵手2 小时前
Python爬虫实战:电商问答/FAQ 语料构建 - 去重、分句、清洗,做检索语料等!
爬虫·python·爬虫实战·faq·零基础python爬虫教学·电商问答·语料构建
Dxy12393102162 小时前
DataFrame条件筛选:从入门到实战的数据清洗利器
python·dataframe