关于yield和return的问题
来源:6-18 知乎spider爬虫逻辑的实现以及answer的提取 - 2
Liangruuu
2018-11-26
老师关于这里的yield和return,为什么上面的函数是一个return list,而下面的函数直接由可以yield 一个request请求,如果把上面的return list改为
yield scrapy.FormRequest( url=post_url, formdata=post_data, headers=self.headers, callback=self.check_login )
或者把下面的yield改成
return [scrapy.Request(url, dont_filter=True, headers=self.headers)]
这样行吗?
写回答
1回答
-
如果你对python的生成器了解的话 就会知道这里实际上都是可以的, 有yield的方法返回的是一个生成器对象。生成器对象是可以进行for循环调用的,如果一个函数返回的是一个list, list也是可以进行for循环的,python的设计思想就是脱离了类型的概念,比如python不会判断你return的是生成器对象还是list对象或者是dict对象,scrapy只会在返回的对象上进行for循环,所以只要你返回的对象可以for循环就行了,但是for循环产生的对象必须是item或者request对象不然scrapy会报错的
122018-12-21
相似问题
yield 和 return的问题
回答 1
页面内list图片下载问题
回答 1
yield与return
回答 1
关于scrapy使用yeild的问题
回答 1
yield和return的效果是否一样
回答 2