【python核心】生成器(面试题常考)


生成器generator

定义

能够动态(循环一次计算一次返回一次)提供数据的可迭代对象。

作用:在循环过程中,按照某种算法推算数据,不必创建容器存储完整的结果,从而节省内存空间。数据量越大,优势越明显。

以上作用也称之为延迟操作或惰性操作,通俗的讲就是在需要的时候才计算结果,从而不是一次构建出所有结果。

"""
    yield --> 生成器
    生成器 = 可迭代对象 + 迭代器
    简述生成器与迭代器的区别(面试题常考)
"""
#生成器的原理
class MyGenerator:
    """
        生成器 = 可迭代对象 + 迭代器
    """
    def __init__(self,stop_value):
        self.begin = 0
        self.stop_value = stop_value

    def __iter__(self):
        return self

    def __next__(self):
        if self.begin >= self.stop_value:
            raise StopIteration
        temp = self.begin
        self.begin += 1
        return temp

def my_range(stop_value):
    number = 0
    while number < stop_value:
        yield number
        number += 1

my01 = my_range(5)
print(type(my01),dir(my01))
print(id(my01.__iter__()),id(my01))

for item in my01:
    print(item)

生成器函数

定义

含有yield语句的函数,返回值为生成器对象。

练习

从列表[4,5,566,7,8,10]中选出所有偶数。
方法1:结果存入另外一个列表中
方法2:使用生成器实现

方法一:
list01 = [4,5,566,7,8,10]
result = []
for item in list01:
    if item % 2 == 0:
        result.append(item)
print(result)

方法二:
list01 = [4,5,566,7,8,10]
def get_even():
    for item in list01:
        if item %2 ==0:
            yield item

my01 = get_even()
for item in my01:
    print(item)

内置生成器

  1. 枚举函数enumerate
    作用:遍历可迭代对象时,可以将索引与元素组合为一个元组。
  2. zip
    作用:将多个可迭代对象中对应的元素组合成一个个元组。

练习

练习1:定义生成器函数my_enumerate,实现下列现象,将元素与索引合成一个元组。

"""
    练习
"""
# #原理
# list01 = [ 3,4,55,6,7]
# for item in enumerate(list01):
#     #(索引,元素)
#     print(item)
#
# #实际开发写的
# for index,element in enumerate(list01):
#     print
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值