关于生成器函数的一个小问题 8月21日

本文探讨了Python生成器函数的工作原理,通过示例解释了如何处理`StopIteration`异常,以及在迭代过程中如何使用`try-except`结构。还介绍了在for循环中如何自然地处理生成器的结束。
摘要由CSDN通过智能技术生成

numbers=[10086, 10000, 10010, 95588]
names=[‘中国移动’,’中国电信’,’中国联通’]
def myzip(iter1,iter2):
it1=iter(iter1)
it2=iter(iter2)
while True:
try:
t=(next(it1),next(it2))
yield t
except:
break/continue 都会报错
it=iter(myzip(numbers,names))
while True:
print(next(it))
结果、
(10086, ‘中国移动’)
(10000, ‘中国电信’)
(10010, ‘中国联通’)

结果、
(10086, ‘中国移动’)
(10000, ‘中国电信’)
(10010, ‘中国联通’)
Traceback (most recent call last):
File “day15.py”, line 170, in
print(next(it))
StopIteration

改进后
numbers=[10086, 10000, 10010, 95588]
names=[‘中国移动’,’中国电信’,’中国联通’]
def myzip(iter1,iter2):
it1=iter(iter1)
it2=iter(iter2)
while True:
t=(next(it1),next(it2))
yield t
it=iter(myzip(numbers,names))
while True:
try:
print(next(it))
except:
break
结果:
(10086, ‘中国移动’)
(10000, ‘中国电信’)
(10010, ‘中国联通’)

例子:
def myyield():
print(“即将生成2”)
yield 2 生产一个就送回去
print(“即将生成3”) 下一个会接着生产
yield 3 生产完送回去
print(“即将生成5”)
yield 5
print(“即将生成7”)
yield 7
print(“生成器生成结束”)

gen=myyield()
it=iter(gen)

生成器函数的执行流程与普通函数不一样,能够动态提供数据

print(next(it)) 2#此时生成器函数开始执行,遇到yield停止
print( next(it)) 3
print( next(it)) 5
print( next(it)) 7
print( next(it)) StopIteration是这条语句产生异常,这是源头而不是由上面传过来的

s={‘唐僧’,’悟空’,’八戒’,’沙僧’}
myit=iter(s)
while True:
try:
x=next(myit)
print(x)
except StopIteration:
break

所有for循环其实都是可迭代器加while循环
for 循环内部有处理StopIteration:异常的机制

老师上课讲这题的时候:
numbers=[10086, 10000, 10010, 95588]
names=[‘中国移动’,’中国电信’,’中国联通’]
def myzip(iter1,iter2):
it1=iter(iter1)
it2=iter(iter2)
while True:
try:
t=(next(it1),next(it2)) 这里产生异常了应该加个try,except语句
yield t
except:
break
这个函数异常传给了for
for t in myzip(numbers,names):
print(t)

二分查找法

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值