yield是python里的生成器,有效利用yield可以有效地节约程序占用的系统资源。
比如这里:
# parse the message with regex def parse_one_page(html): pattern = re.compile('<dd>.*?board-index.*?>(.*?)</i>.*?title="(.*?)".*?data-src="(.*?)".*?class="star">' '(.*?)</p>.*?releasetime">(.*?)</p>.*?integer">(.*?)</i>.*?fraction">(.*?)</i>', re.S) items = re.findall(pattern=pattern, string=html) for item in items: yield { 'index': item[0], 'title': item[1].strip(), 'image': item[2], 'actor': item[3].strip()[3:], 'time': item[4].strip()[5:], 'score': item[5].strip() + item[6].strip() } return items
这里使用了yield关键字,如果不使用那么这个数据结构会全部存储在内存中,如果数据结构过于庞大,会占用大量的系统资源,所以使用yield生成器,相当于有一个索引,只有每次调用的时候,索引返回一条数据,所以这样就不会占用很多的系统资源。
程序执行到yield不会继续执行,而是等待,只有当调用者调用返回时执行并返回数据,并在下一个yield处等待。
yield有两个方法:__next__() 和sent()
用法基本一样,不同的是前者从yield前到下一个yield前,而sent是从yield后到下一个yield后,所以第一次调用不可以调用sent(),同时,sent(x)可以对yield表达式进行更改。
0 条评论