#课程回忆day 17 生成器,迭代器,yield send iter next

#课程回忆day 17 生成器,迭代器,yield send iter next


#列表生成式
print([x*2+6 for x in range(10)])
#生成器(generator Object)
# next send 方法

#创建生成器两种方式:
# 1.(x*2+6 for x in range(10))>>>>>>>>>>generator Object
# 2.def f(): f()是个生成器>>>>>>>>>>generator Object
# yield 5
# print("ok")
# next(f())-------------计算出一个值
#注意:生成器在创建的时候已经决定了这个生成器在最后能计算出值的个数,就是调用next次数,
# 超过这个值就会报Stopiteration
# 遍历所有元素可以通过for循环
#for循环帮我们做了3件事情
# 1.调用对象的iter()方法,返回一个迭代器对象。

#send():
def foo():
while True:
x = yield
print("value:",x)

g = foo() # g是一个生成器
next(g) # 程序运行到yield就停住了,等待下一个next
g.send(1) # 我们给yield发送值1,然后这个值被赋值给了x,并且打印出来,然后继续下一次循环停在yield处
g.send(2) # 同上
next(g) # 第一次没有给x赋值,执行print语句,打印出None,继续循环停在yield处
g.send(5)
print("**"*26)
#f().send(None) 等价于 next(next(f()))?????

#什么是迭代器,满足迭代器协议#2.内部有iter方法 #1.内部有next方法
#为什么要有iter()方法?[1,3,5,].__iter__() [1,3,5,]:Iterrble(可迭代对象,内部有iter方法)
l = [1,2,3,4]
d =iter(l)
print(d)
print(next(d))
print(next(d))
# 2.通过while循环不断循环next(list_iterator对象)返回值。
# 3.通过异常处理,捕捉处理Stopiteration异常。
p = (1,2,3,4)
q = iter(p)
print(q)
print(next(q))
print(next(q))
r = {"1",2,3,(1,3)}
s = iter(r)
print(s)
print(type(next(s)))
print(next(s))
print(type(next(s)))
print(type(next(s)))

猜你喜欢

转载自www.cnblogs.com/bdua/p/12238281.html
今日推荐