Python迭代器与生成器

在Python中,迭代器和生成器都用于遍历序列或生成序列,但它们的工作方式和用途不同

一、迭代器

迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。
在Python中,迭代器需要实现两个方法,即__iter__() 和 __next__()。任何包含__iter__和__next__()方法的对象都是迭代器。

# Python中的迭代器示例
class MyNumbers:
    def __iter__(self):
        self.a = 1
        return self

    def __next__(self):
        x = self.a
        self.a += 1
        return x


myclass = MyNumbers()
myiter = iter(myclass)

print(next(myiter))  # 1
print(next(myiter))  # 2

二、生成器

生成器是一种特殊类型的迭代器(其实可以说它是更简洁版的迭代器)。与编写__iter__()和__next__()相比,编写生成器要简单得多,只需要一个函数即可。
使用Yield语句从函数返回值。这样的函数被称为生成器函数。 生成器函数返回的是一个生成器对象。

# Python中的生成器示例
def my_generator():
    n = 1
    print('This is printed first')
    yield n

    n += 1
    print('This is printed second')
    yield n

    n += 1
    print('This is printed at last')
    yield n


a = my_generator()
print(next(a))  # This is printed first, 1
print(next(a))  # This is printed second, 2

在 Python 中,yield 是一个关键字,用于在函数定义中,特别是在定义一个生成器(generator)时使用。
yield 和 return 类似,都会从函数中返回一些值。但它们的行为却非常不同:
当一个函数调用 return 语句,该函数的执行就会立即停止,返回值给调用者,并且舍弃掉当前函数内的所有局部变量的信息。
相比之下,当一个函数调用 yield 语句时,函数并不会退出,而是每次产生一个值后函数会被冻结,保留当前所有的局部变量的信息,并在下次调用 next() 方法时,从上次 yield 表达式的下一条语句开始执行。
因此,yield 是构建生成器以支持延迟操作或流式数据处理的关键。

*需要注意的是,生成器只能遍历一次。因为它们不把所有的值存储在内存中,而是在运行时生成值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值