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

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

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

相关推荐
清水白石0081 小时前
Python 编程实战全景:从基础语法到插件架构、异步性能与工程最佳实践
开发语言·python·架构
yaoxin5211232 小时前
390. Java IO API - WatchDir 示例
java·前端·python
武帝为此3 小时前
【数据清洗缺失值处理】
python·算法·数学建模
zhangchaoxies4 小时前
如何在 Go 中安全复制接口指针所指向的值
jvm·数据库·python
曲幽4 小时前
FastAPI + Pydantic 模型终极实战手册:从能跑就行到固若金汤,这些技巧你一定用得上
python·fastapi·web·model·field·pydantic·validator·basemodel
计算机软件程序设计4 小时前
Python Flask工程目录解读
python·flask·工程目录解读
Ares-Wang4 小时前
Flask》》 Flask-OpenID 认证、 OpenID Connect (OIDC)
后端·python·flask
m0_734949795 小时前
怎么利用Navicat进行调整备份文件压缩等级_详细配置与操作步骤
jvm·数据库·python
m0_741173335 小时前
如何处理SQL中的NULL值_使用ISNULL或COALESCE函数
jvm·数据库·python
AC赳赳老秦5 小时前
OpenClaw进阶技巧:批量修改文件内容、替换关键词,解放双手
java·linux·人工智能·python·算法·测试用例·openclaw