生成器python简述

生成器(generator)

得到生成器的方式:
1.通过列表推导式得到生成器

newlist = [x*3 forx in range(20)]
print(newlist)




得到生成器
newlist = (x*3 forx in range(20))
print(type(newlist))----------------generator
print(newlist)----------------------generator object <genexpr> at 0
输出为:
#方式1:通过调用__next__()方式得到元素
print(newlist.__next__())-----0
print(newlist.__next__())-----3
print(newlist.__next__())-----6
print(newlist.__next__())-----9
print(newlist.__next__())-----12
print(newlist.__next__())-----15
#方式2next(生成器对象)  builtins 系统内置函数
#每调用一次next则会产生一个元素
print(next(newlist))
print(next(newlist)) 
print(next(newlist))
print(next(newlist))
print(next(newlist))
print(next(newlist))         #StopIteration  生成器本来就可以产生10个 得到10个,继续调用时就会出现异常。
g = (x*3 for x in range(10))

while True:
	try:
		e = next(g)
		print(e)
	except:
	print("没有更多的元素啦 !")
	break

生成器的方法:
next:获取下一个元素
send(value):向每次生成器调用中转值。 注意第一次调send(None)。

定义生成器的方式2:借助函数完成
只要函数中出现了yield关键字,说明函数就不是函数啦,就是生成器。
斐波那契数列
步骤:
1.定义一个函数,函数中使用yield关键字
2.调用函数,接受调用的结果
3.得到的结果就是生成器
4.借助next(),next

def func():
	n = 0 
	while True:
		n += 1
		yield n-------相当与return  n ,  但是多了一个暂停。
g = func()
print(g)

print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))

斐波那契数列

def fib(length):
	a,b = 0,1
	n=0
	whine n<length:
		print(b)
		yield b
		a,b = b,a+b
		n += 1
g = fib(8)
print(g)
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
输出:
1
1
2
3
5
8
13
21
def gen():
	i = 0
	while i<5:
		temp = yield i
		print('temp:',temp)
		i += 1
	return '没有更多的数据'
gen()

print(g.send(None))
n1 = g.send('呵呵')
print('n1:',n1)
n2 = g.send('哈哈')
print('n2:',n2)

定义生成器的方式:
1.通过列表推导式
g =(x+1 for x in range(6))
2.函数+yield
def func ():
。。。
yield
g = func()
产生元素:
1.next(generator)--------------》每次调用都会产生一个新的元素,如果产生完毕,再次调用的话就会产生异常
2.生成器自己的方法
g.next()
g.next(value)
应用 : 协程

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值