转载: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')