python无限循环的关键字_python笔记25_yield关键字

本文深入探讨了Python中的生成器函数,特别是yield关键字的使用。通过实例展示了如何创建生成器,如何通过next()或for循环调用生成器,以及如何处理StopIteration异常。此外,还讲解了无限生成器的实现,用于生成无穷尽的随机数序列。总结了yield的关键特性,包括保存程序上下文和生成器对象的管理。
摘要由CSDN通过智能技术生成

主要内容:

小目标:掌握生成器函数

主要内容:yield关键字使用

如果看完这篇文章,你还是弄不明白yield,

你来找我,我保证不打你,我给你发100的大红包。

1. 一个需求

想要产生一个无穷的可迭代对象,每次生成一个随机数;

问题:使用while循环,存放到列表中,内存有限,不可行

2. yield关键字

生成器函数:python中带yield关键字函数,成为生成器函数

一个例子:

import random

def genRandom():

#yield关键字

yield random.randint(0,1000)

#genRandom的返回值不是None,

#genfunc是一个:generator,生成器

genfunc = genRandom()

print(type(genfunc))

#genfunc使用next调用,返回产生的随机数

r = next(genfunc)

print(r)

结果:

803

分析:genfunc为生成器对象;

3 生成器函数调用分析

加入调试信息,观察生成器函数执行过程

import random

def genRandom():

#yield关键字

r = random.randint(0,1000)

print('befor yield')

yield r

print('after yield')

genfunc = genRandom()

第一次调用:

print(next(genfunc))

结果:没有执行:print('after yield')

befor yield

726

分析:调用yield之后,返回产生随机数:314,然后停止

再次执行:

print(next(genfunc))

结果:

after yield

StopIteration Traceback (most recent call last)

分析:执行yield下一条语句,并报异常。

原因:通过异常告知调用者,生成器执行结束;

如果想要再次执行生成器,必须重新创建生成器对象。

4. 函数中添加多个yield

一个例子:

import random

def genRandom():

print('--->1')

yield random.randint(0,1000)

print('--->2')

yield random.randint(0,1000)

print('--->3')

genfunc = genRandom()

next(genfunc)

next(genfunc)

next(genfunc)

结果:最后一次调用报异常;

--->1

--->2

--->3

StopIteration:

5. 使用for循环遍历生成器

genfunc = genRandom()

for item in genfunc:

print(item)

结果:没有问题,因为for循环处理了StopIteration异常

--->1

728

--->2

192

--->3

再次调用:

for item in genfunc:

print(item)

没有任何结果,

注意:

1.生成器函数内部yield都执行完之后,不能再次使用;

2.需要重新创建新的生成器对象

6.无限的生成器函数

代码:

import random

def genRandom():

#yield关键字

while True:

r = random.randint(0,1000)

print('befor yield')

yield r

print('after yield')

genfunc = genRandom()

for i in range(10):

print(next(genfunc))

for i in range(10000):

print(next(genfunc))

结果:可以看到,可以产生无穷尽的随机数

7.yield关键字总结

1.带yield关键字的函数,返回生成器对象;

2.yield关键字保存程序运行上下文

3.生成器可以通过for或者next进行调用,注意异常处理;

4.生成器对象执行完,需要重新创建生成器对象

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值