当前位置:首页>python>Python 生成器Generator

Python 生成器Generator

  • 2026-10-11 06:35:58
Python 生成器Generator
Python 生成器是一种特殊的迭代器,优势是惰性生成数据,极大的节省内存空间(按需生成,不是一次性生成所有数据),好比领导找员工一对一谈话,叫到谁,谁来谈,而不是一次性所有员工一起到领导办公室。
有两种方式创建生成器:
  1. 生成器函数:使用yield代替return
  2. 生成器表达式:类似列表推导式,但用圆括号 () 代替方括号 []
生成器函数:
普通函数遇到return执行结束并返回值,而生成器函数遇到 yield 会暂停执行,并将 yield 后的值返回;下次调用时,从暂停的位置继续执行,直到再次遇到 yield 或函数结束。
# 定义一个生成器函数,生成1到3的数字def my_generator():print("开始生成第一个数")    yield 1  # 暂停,返回1print("继续生成第二个数")    yield 2  # 暂停,返回2print("继续生成第三个数")    yield 3  # 暂停,返回3print("生成结束")# 创建生成器对象(此时函数并未执行)gen = my_generator()# 方式1:通过next()函数获取值print(next(gen))  # 执行到第一个yield,输出:开始生成第一个数 \n 1print(next(gen))  # 从暂停处继续,输出:继续生成第二个数 \n 2print(next(gen))  # 输出:继续生成第三个数 \n 3#print(next(gen))  # 无更多yield,抛出StopIteration异常# 方式2:通过for循环遍历(自动处理StopIteration),遍历完后自动结束遍历,不会抛出StopIteration异常print("\n通过for循环遍历:")for number in my_generator():print(number)
生成器表达式:
# 列表推导式(一次性生成所有数据,占用内存)my_list = [x * 2 for x in range(5)]print("列表推导式结果:", my_list)  # [0, 2, 4, 6, 8]# 生成器表达式(惰性生成,仅创建生成器对象)my_gen = (x * 2 for x in range(5))print("生成器对象:", my_gen)  # <generator object <genexpr> at 0x...># 遍历生成器print("生成器遍历结果:")for number in my_gen:print(number)  # 依次输出0,2,4,6,8
注意点:
惰性计算:只有调用 next() 或遍历的时候才会生成数据,未调用或遍历时不占用内存存储数据。
不可重复遍历:生成器是一次性的,遍历完后就耗尽了,需要重新创建生成器对象才能再次遍历。
节省内存:比如生成 2000 万个数字,列表会占用大量内存,而生成器只占用少量内存(只记录当前状态)。

💡往期文章

HyperMesh基于Python二次开发 return/break/continue的区别

HyperView/HyperMesh基于Python二次开发 循环怎么用(for/while)

HyperMesh/HyperView Python 二次开发 中import hw和hm是什么?

仿真软件二次开发基础之Python 条件判断

Ansa 二次开发,创建特定set

HyperView 基于Python二次开发-常用功能合集

CAE仿真 孔边网格必须分布偶数节点的一种解释

最新文章

随机文章