yield, next ,send

Posted 老李头儿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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"))

以上是关于yield, next ,send的主要内容,如果未能解决你的问题,请参考以下文章

yield, next ,send

生成器yield(17-06)

yield与yield from

为啥 __next__() 内部的 yield 会返回生成器对象?

为啥 __next__() 内部的 yield 会返回生成器对象?

python 生成器yield 和 迭代器iter next 示例