python的生成器
1.生成器,高阶函数map,reduce 返回的都是生成器对象
下面的结果输出,会初始化一个列表,占用内存空间
# lis = [x*x for x in range(10)]
# print(lis)
而使用生成器,返回结果是生成器对象,可以进行迭代,相对于上面,可以节省内存空间,只有在使用的时候,才会占用内存空间
# lis2 = (x * x for x in range(10))
# print(lis2)
# <generator object <genexpr> at 0x0000026007596BF8>
print(list(lis2))
示例2:
# 第一种方式:
# def get_list(lst):
# res = []
# for i in lst:
# if i % 2:
# res.append(i)
# return res
#
#
# print(get_list([1, 2, 3, 4]))
# 第二种方式,使用yield
# def get_list2(lst):
# for i in lst:
# if i % 2:
# yield i
# r = get_list2([1, 2, 3, 4, 6])
# print(r)
# yield 返回的是生成器,可以进行循环,减少代码量,节省内存空间
# <generator object get_list2 at 0x00000219E2D36BF8>
# print(list(r))
# [1, 3]
示例3:
# 1.直接使用sum对列表1-4求和,生成一个新列表,会浪费列表空间
# print(sum([x for x in range(5)]))
# 2.使用生成器对象,用for 循环做一个生成器对象,对生成器进行加和,不会产生新列表
# print(sum(x for x in range(5)))