生成器 yield, next ,send
重要的yield :相当于一个断层,我们再用next取拿出每一层
重要的next :生成器查看装置,查看每一个断层
重要的send :和next一样查看每一个段层,不过在查看第二个断层的时候,就可以对前面的"一个断层"变量进行添加值
生成器创建方式之一
s=(x*2 for x in range(5))
print(next(s))
print(next(s))
print(next(s))
print(next(s))
print(next(s))#一次只能拿一个数
# print(next(s))#most recent call last生成器只能拿出对应元素,如果想多拿就会报错
取值方法
for i in s:#生成器是一个可便利对象
print(i)
生成器创建方法2
def aoo():
print('ok')
yield 1
print("abc")
# print("xiong")
yield "返回值"
a=aoo()
next(a)#使用生成器都要用next
next(a)#使用生成器都要用next
for i in a:#使用for i in a 时可以吧返回值一并打出
print(i)#ok 1 abc 返回值
什么是可迭代对象:可以使用iter方法的就是可迭代对象
[1,2,3].__iter__()
斐波那契数列升级版
def fib(max):
n,a,b=0,0,1
while n <max:
print(b)
# a,b=b,a+b#同时进行
#改版
now=a#保护原有值
a=b#赋值
b=now+b#赋值
n+=1
fib(6)
生成器版斐波那契数列
def fib(max):
n,a,b=0,0,1
while n <max:
yield a
a,b=b,a+b#同时进行
n=n+1
g=fib(8)
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
send使用
def aoo():
print("ok")
count=yield 22
print(count)
print('ok2')
mmd=yield 222
print(mmd)
print('ok3')
yield 22222222
g=aoo()
print(g.send(None))
print(g.send("xiong"))
print(g.send("i love you"))