# 定义一个生成器函数,生成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💡往期文章
HyperMesh基于Python二次开发 return/break/continue的区别
HyperView/HyperMesh基于Python二次开发 循环怎么用(for/while)