大家好,我是金鱼座,一个走在测试领域这片蓝海中, 蹉跎前行的技术渣渣,唯有一直走下去,也许能改变点什么,加油!
yield是作为一个生成器的重要标志,在后面的很多地方都或多或少都会用到,特别是如果要学习一些框架代码的时候,由于个人能力问题,对这类的东西一直一知半解,所以今天就把自己的了解做总结下
yield常见的使用法
# 第一种普通用法
def yield_1():
print("yield_1 start")
yield
print("yield_1:{}".format(c))
# 带有返回值的用法
def yield_2(value):
print("yield_2 start")
yield value
print("yield_2:{}".format(c))
# 可以接收值的用法
def yield_3(value):
print("yield_3 start")
c = yield value
print("yield_3:{}".format(c))
- 在函数中增加yield,即可完成生成器的定义,这是绝对的,如上述代码,
- yield中即可和普通的return一样进行值返回,也可以像方法参数一样接收值的传递
如何执行?
对于一个生成器必须使用next和send对其进行唤醒操作,否则是不会自动进入到方法中执行
y = func()
y.send(None) or next(y)
如何传值?
y.send(value) 该方法会将value值传给yield_3中的 c, c会自动接收
如何返回值
g = next(y) or y.send(value2) 该方式可以让g获取y中的yield value中的value的值
目前来看最基本的三个方式就是上述三种,至于是否有其他的,暂时也没有研究,先弄明白这些吧