本人也是一个菜鸟, 写这篇文章也是记录自己遇到的问题方便日后用到能够快速找到,如果能对读者有所帮助我万分荣幸。如果此简书与别的文章有所雷同,望大家多多包涵。如果存在问题或者有写错的地方,望大家积极指出错误。生活不易,祝各位读者都能活成自己想要的样子。
#!/usr/bin/python3
def test_generator():
value = yield 1
yield value
gen = test_generator()
print(gen.send(None))
print(gen.send("giao"))
以上案列输出:
1
giao
看到输出其实读者应该就知道send的用法了, 其实他和next差不多, 只是send可以携带一个参数作为第一次挂起yield语句的返回值,但是小伙伴们应该也注意到了第一个输出为什么是携带一个None; 那是因为启动生成器运行第一个yield, 没有上一次挂起的yield的语句返回值; 所以小伙伴们要注意一下send启动生成器,第一个send必须携带None这个关键字为参数; 不然会报错:TypeError: can't send non-None value to a just-started generator。
#!/usr/bin/python3
def test_generator():
value = yield 1
yield value
gen = test_generator()
print(gen.send(None))
print(gen.send("giao"))
print(gen.send("james"))
以上案例和第一个案例只多了一次sned调用:
会产生StopIteration报错, 那是因为生成器执行完成了,再次调用会抛出StopIteration异常。