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)))


posted @ 2021-01-17 01:21  maxwell11  阅读(122)  评论(0编辑  收藏  举报