初识Python中的Iterable、Iterator、Generator

1.定义

Iterable可迭代对象

实现了__iter()__方法的object都是iterable。

Iterator迭代器

1.迭代器是一个对象,该对象代表了一个数据流。
2.重复调用迭代器的__next__方法(或将迭代器对象当作参数传入內置函数next()中)将依次返回数据流中的元素。
3.当数据流中无可返回元素时,则抛出StopIteration异常。
4.迭代器必须拥有__iter__方法,该方法返回迭代器对象自身,通俗的讲就是迭代器对象必须同时实现__iter__()方法和__next()__方法

Generator 生成器

在Python中,生成器是一种特殊类型的函数,用于迭代操作,通过使用关键字yield返回值,节省内存空间。

2.使用方法

2.1 知识引入

python中经常使用for循环迭代列表,并且对于同一个列表,for循环可以迭代多次而不抛出StopIteration异常。什么意思呢?见代码和运行结果:

from collections.abc import Iterable, Iterator

# 首先讲讲列表list
my_list = [1, 2, 3]
print("列表是否为可迭代对象:", isinstance(my_list, Iterable))    # True
for i in my_list:
    print("first loop: ", i)

print("------------")
for j in my_list:
    print("second loop: ", j)

运行结果
使用isinstance发现列表对象my_list是可迭代对象同时也是迭代器,并且使用for循环不止可以迭代一次。
为什么我会说这个习以为常的用法?吃饱了撑的(不是)
引入以下问题:

  • 什么对象才能使用for循环迭代?
  • 如何自定义可迭代对象?
  • 如何自定义迭代器?

2.2 Iterable

现在我们自定义一个包含__iter__方法的类

class my_class:
    def __iter__(self):
        pass
Class = my_class()
# 可以通过isinstance证明my_class这个类不是Iterable,但是其实例化是Iterable
print("Class is Iterable: ", isinstance(Class, Iterable))  
print(</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值