Python 生成器(自用)

g =(x for x in range(1,1000)) 生成器
print(g.__next__())
print(g.__next__())
print(g.__next__()) 获取方式一
print(g.__next__())
print(next(g)) 获取方式二
print(next(g))
print(next(g))
print(next(g))

每调用一次生成一个结果,用哪个取哪个,取到尽头不能再取,不然会报错,用生成器这样不占用过多内存

def func():
    n=0
    while True:
        n += 1
        yield n 代表把函数变成生成器
g = func()
print(next(g)) 第一次抛出接到n
print(next(g))第二次重yield下一段代码开始然后抛出
print(next(g))
print(next(g))

yield代表在此位置停下并抛出n,注意暂停后,下一次调用next()就会从暂停的下方代码重新开始。

n = yield n 如果遇到这种,执行第一次会先停然后next()先输出一次,第二次才会在这个位置开始赋值到n

g.send(‘字符串或者数字’')把字符串或者数字传到n上,但第一次send必须先传空值g.send(none)

例子:

def test1(n) :
    for i in range(n):
        print('test1',i)
        yield None

def test2(n) :
    for i in range(n):
        print('test2',i)
        yield None

t1 = test1(10)
t2 = test2(10)

while True:
    try:
        t1.__next__()
        t2.__next__()
    except Exception:
        break

test1和test2函数后面加yield暂停,下面再调用,这样就可以做到每循环一次然后切换下个函数运行一遍。

应用点:协程

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值