在以前的学习中,只是简单的把yield当作return进行使用。
但在For自动爬虫的过程中,一个函数内出现了多个yield(不是选择分支结构)。这让我重新回顾yield和return的区别。
return
return即一个函数的出口,返回一个结果。在一个函数中遇到return即结束本函数,其后面的代码不再执行。
def test():
a = 5
return a
b = 10
return b
print(test())
yield
函数中有yield,返回一个生成器对象。通过next()可以取出其对象中的值,每次取出后,执行该yield的下一行。
在只使用一次返回值的情况下,yield可以当作return用。但在循环和递归等需要迭代的情况中,return只能在循环结构外一次性返回所有结果,yield可以在放循环内返回每一次循环的输出。
def test():
print("begin")
while True:
print("test on")
yield 4
print("test close")
第二次使用next()调用包含yield的对象时,在循环中执行了yield后的语句,输出了close,然后继续循环直到碰到yield结束。