python 生成器
推导式
通过列表生成式(列表推导式),我们可以直接创建一个列表
但是受到内存限制,列表容量是有限的
而且创建一个100万元素的列表,会占用很大的存储空
如果我们只需要访问前面几个元素,那后面大多数元素占用的空间就白白浪费了
所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?
这样就不必创建完整的list,从而节省大量空间,在python中,这样一边循环一遍计算的机制,称为生成器,generator
list=[x*3 for x in range(20)]
print (type(list))
list1=(x*3 for x in range(20))
print (type(list1))
print (list1)
print (list1.__next__())
print (list1.__next__())
print (list1.__next__())
print (next(list1))
示例
'''
条件:
1.定义一个函数,函数中有yield
2。调用函数,接收调用的结果
3.得到的结果就是生成器,
4.借助 __next__ 或者 next 得到元素
'''
def func():
n=0
while True:
n+=1
yield n
g=func()
print (g)
print (next(g))
print (next(g))
def fib(length):
a,b=0,1
n=0
while n < length:
yield b
a,b=b,a+b
n+=1
return '没有更多的参数了'
result=next(fib(3))
print("斐波那契的第三个数是:{}".format(result))
def gen():
i=0
while i < 5:
temp = yield i
print ('temp',temp)
i +=1
return "没有更多的数据"
g=gen()
print (next(g))
print (next(g))
print (next(g))
print (g.send(None))
n1=g.send("嘻嘻")
print ('n1',n1)
n2=g.send("哈哈")
print ('n2',n2)
def task1(n):
for i in range(n):
print ("正在搬第{}几块砖".format(i))
def task2(n):
for i in range(n):
print ("正在听第{}首歌".format(i))
task1(10)
task2(10)
def task1(n):
for i in range(n):
print ("正在搬第{}几块砖".format(i))
yield None
def task2(n):
for i in range(n):
print ("正在听第{}首歌".format(i))
yield None
g1=task1(5)
g2=task2(5)
while True:
try:
g1.__next__()
g2.__next__()
except:
pass
'''
生成器方式:
1.通过列表推导式子
g=(x*3 for x in range(10))
2.函数列有 yield
产生元素:
1.next(generactor) 每次调用产生一个元素,元素产生完毕,再次调用就会异常
2.生成器自己的办法:
g.__next__
g.send(key)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
2022-07-13 mysql 重置root密码
2022-07-13 mysql 慢查询