下面的例子是一个生成指定书目的随机数的函数,这个函数的返回值是一个可迭代的对象,也就是生成器,在使用生成器的过程中,我感受到了两个生成器带来的好处,第一个是生成器返回一个可迭代对象,每一次迭代产生一个值,然后去处理这个值,这样在处理大数据的时候可以很好的节省内存,另一方面,使用生成器可以让代码更加简洁易懂,如果我们的函数要返回一个列表,那么我们需要事先先定义一个空的list,然后通过循环逐个加入到列表中,最终使用return 返回list,但是生成器的好处在于,我们不需要事先指定空的list,只需要通过yield关键词返回一个生成器,然后通过list(生成器)直接将所有的结果放到一个list当中,可以说,让我们的代码变得更加简洁了,因为少了几行,且更容易懂,我是这样理解的。
import random
def makerandom(limit,random_range):
for i in range(limit):
yield random.randrange(random_range)
random.seed(1)
print(list(makerandom(10,8)))
# [2, 1, 4, 1, 7, 7, 7, 6, 3, 1]
下面的这段代码是不使用生成器的版本
def makerandom(limit,random_range):
random_list = []
for i in range(limit):
random_list.append(random.randrange(random_range))
return random_list
可以看到多了两行代码。
不过事实上,我们也可以通过列表解析式来简化代码,如下所示
def makerandom(limit,random_range):
return [random.randrange(random_range) for i in range(limit)]