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表达式进行更改。
 

分类: Python

0 条评论

发表回复

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用 * 标注