温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

python生成器怎么用

发布时间:2026-10-15 14:52:59 来源:亿速云 阅读:85 作者:小樊 栏目:编程语言

Python 中的**生成器(generator)**是一种可以“边生成边使用”的可迭代对象,常用于处理大量数据或无限序列,节省内存。

下面从基本用法 → 常见写法 → 实际例子一步步说明。


一、什么是生成器?

普通函数用 return 返回结果并结束
生成器函数用 yield 返回值,并“暂停”函数状态

def my_gen():
    yield 1
    yield 2
    yield 3

调用它不会立即执行:

g = my_gen()

它是一个生成器对象:

print(g)  # <generator object my_gen at 0x...>

二、使用生成器(迭代)

生成器只能迭代一次

for i in g:
    print(i)

输出:

1
2
3

或用 next():

g = my_gen()
print(next(g))  # 1
print(next(g))  # 2
print(next(g))  # 3
# print(next(g))  # StopIteration

三、生成器的核心特点

✅ 惰性计算(用的时候才生成)
✅ 节省内存
✅ 可表示无限序列


四、常见写法 1:函数 + yield

def count_up(n):
    i = 1
    while i <= n:
        yield i
        i += 1

for x in count_up(5):
    print(x)

五、常见写法 2:生成器表达式

类似列表推导,但用 ()

gen = (x*x for x in range(5))
for v in gen:
    print(v)

对比:

list_comp = [x*x for x in range(5)]  # 立即生成
gen_exp   = (x*x for x in range(5))  # 延迟生成

六、实际例子:读取大文件

避免一次性读入内存:

def read_lines(path):
    with open(path, encoding="utf-8") as f:
        for line in f:
            yield line.strip()

for line in read_lines("big.txt"):
    print(line)

七、无限生成器示例

def infinite_numbers():
    n = 0
    while True:
        yield n
        n += 1

g = infinite_numbers()
print(next(g))  # 0
print(next(g))  # 1

八、生成器 vs 列表

对比项 列表 生成器
内存 大 小
速度 快(已生成) 慢一点(即时)
可否重用 可以 不可以
适用 小数据 大数据 / 流式

九、进阶:yield from

def sub_gen():
    yield 1
    yield 2

def main_gen():
    yield from sub_gen()
    yield 3

for x in main_gen():
    print(x)

如果你愿意,我可以:

  • 用具体业务场景讲生成器
  • 对比 iterator / generator / coroutine
  • 讲 async generator(异步生成器)

你更想了解哪一部分?

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手