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)
二分查找法