转载:https://www.jianshu.com/p/ccb5e7da3fd8

   https://www.cnblogs.com/xhcdream/p/8304953.html

   https://www.cnblogs.com/wushuaishuai/p/9212812.html

send方法和next方法唯一的区别是在执行send方法会首先把上一次挂起的yield语句的返回值通过参数设定,从而实现与生成器方法的交互。

但是需要注意,在一个生成器对象没有执行next方法之前,由于没有yield语句被挂起,所以执行send方法会报错。

因为当send方法的参数为None时,它与next方法完全等价。但是注意,虽然这样的代码可以接受,但是不规范。所以,在调用send方法之前,还是先调用一次next方法为好。

# 创建生成器
# 第一种
a = (i for i in  range(5))
print(a)
print(a.__next__())
print(next(a))
for i in a:
    print(i)
# 第二种
def test(n):
    for i in range(n):
        yield i
num = test(5)
print(num.__next__())
print(next(num))
for i in num:
    print(i)
"E:\Program Files\JetBrains\PycharmProjects\python_demo\venv\Scripts\python.exe" "E:/Program Files/JetBrains/PycharmProjects/python_demo/day19/send.py"
0
1
2
3
4

Process finished with exit code 0

send

def test(n):
    for i in range(n):
        s = yield i
        print(s)
a = test(5)
a.send(None) #或next(5)/a._next_()
a.send('a')
a.send('b')

 

posted on 2019-11-28 12:05  月零Ray  阅读(245)  评论(0编辑  收藏  举报