2020-12-02

1.生成器

在 Python 中,一边循环一边计算的机制,称为生成器(Generator);
生成器是一个返回迭代器的函数,只能用于迭代操作;
2.什么是生成器函数

生成器是Python中的一个对象,对这个对象进行操作,可以依次生产出按生成器内部运算产生的数据;
生成器函数指的是函数体中包含yield关键字的函数(yield就是专门给生成器用的return);
生成器可以通过生成器表达式和生成器函数获取到;
3.生成器函数的定义

def add():
for i in range(10):
yield i
g = add()
print(g) # <generator object add at 0x10f6110f8>
print(next(g)) # 0
print(next(g)) # 1
我们可以通过yield关键字来定义一个生成器函数,这个生成器函数返回值就是一个生成器对象;
4.生成器函数的调用

def gen():
print(‘111111’)
yield ‘111111’
print(‘222222’)
yield ‘222222’
print(‘333333’)
yield ‘333333’

g = gen()
print(g) # <generator object gen at 0x0026BBF0>
next(g) # 111111
next(g) # 222222
next(g) # 333333
next(g, ‘over’)
生成器函数可以使用next()迭代,且每次next()只会返回一次yield的值,然后暂停,下次一次next()时会在当前位置继续,如果没有元素可以迭代了,还 执在行next()则需要给定一个默认值,不给默认值会报错;
如果在生成器函数中使用return,则会终止迭代,且不能得到返回值;
def gen():
print(‘111111’)
yield ‘111111’
print(‘222222’)
return ‘222222’
print(‘333333’)
yield ‘333333’

g = gen()
print(g) # <generator object gen at 0x0026BBF0>
next(g) # 111111
next(g) # 222222, 抛出异常
5.生成器函数的使用场景

死循环

def way():
i = 0
while True:
i += 1
yield i
c = way()
print(next©) # 1
print(next©) # 2
print(next©) # 3
print(next©) # 4
print(next©) # 5
在生成器中使用死循环,不会一直执行,仍旧是执行多少次next(),返回多少个值;
6.生成器函数中的语法糖

普通生成器函数way1

def way1():
for i in range(5):
yield i

带语法糖的生成器函数way2

def way2():
yield from range(5)

#循环输出way1
for i in way1():
print(i) #0 1 2 3 4

#循环输出way2
for j in way2():
print(j) #0 1 2 3 4

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值