Python genetor(生成器)--yield 用法
2022/2/5 14:14:02
本文主要是介绍Python genetor(生成器)--yield 用法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
- 迭代--一个接一个地读取列表中值的过程
list1=[1,2,3] for i in list1: print(i,end=' ')
# 1 2 3
list2=[x*x for x in range(5)] for i in list2: print(i,end=' ')
# 0 1 4 9 16
上述代码当迭代次数为500万时,每一个值都需要放在内存里,非常消耗资源,为了节省内存资源,产生了Python Generator。
2. Python Generator--用多少生成多少,用完就扔掉,(只能用一次)--解决了资源消耗问题
#创建生成器 data_generator=(x*x for x in range(5)) data_generator #<generator object <genexpr> at 0x00000168EE7BCF90> # 生成器用法 for i in data_generator: print(i ,end=' ') # 0 1 4 9 16 #第二次迭代 for i in data_generator: print(i ,end=' ') # #注,什么也没有 #区别列表 data_generator=[x*x for x in range(5)] data_generator #[0, 1, 4, 9, 16]
3. yield用法--- 生成器原理
yield与return类似
return expression --直接退出方法(函数),并返回expression 的值
yield也是返回值,但返回的是一个generator,generator当前值就是yield后面跟的表达式的值
每一个generator对象都有一个隐含方法.__next__() --可以单独调用,该方法的返回值就是yield后面表达式的值。
# 输出所有不大于max的偶数 def generator_even(max): for i in range(0,max+1): if i % 2==0: yield i #generator_even(10) #<generator object generator_even at 0x00000168EFB2A510>
generator_even=generator_even(10) for i in generator_even: print(i,end=' ') #0 2 4 6 8 10 #seconds times for i in generator_even: print(i,end=' ') #什么也没有输出
关于容易出现的报错:--从定义的函数开始,从新跑一边
def generator_even(max): for i in range(0,max+1): if i % 2==0: yield i even_generator=generator_even(10) even_generator.__next__() # 0 even_generator.__next__() #2 even_generator.__next__() #4 even_generator.__next__() 6 even_generator.__next__() # 8 even_generator.__next__() 10 even_generator.__next__() # StopIteration: #当调用次数超过迭代次数就会出现上述异常, 应该使用try...except 捕获该异常
4.用普通函数模拟生成器
# 普通函数模拟生成器效果 #将生成器变为普通列表 def generator_even1(max): evens=[] for i in range(0,max+1): if i % 2==0: evens.append(i) # yield i return evens generator_even1(20) #[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
这篇关于Python genetor(生成器)--yield 用法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门