python中的可迭代对象以及迭代器__iter__()

在 Python 中,可迭代对象是指能够通过迭代器进行遍历的对象。

可迭代对象必须实现 __iter__() 方法,该方法返回一个迭代器对象。

下面是一些在 Python 中常见的可迭代对象:

列表 (List): 列表是有序的,可以通过索引访问元素。可以使用 for 循环遍历列表。

my_list = [1, 2, 3, 4, 5]

元组 (Tuple): 元组是不可变的有序序列,类似于列表。同样可以通过 for 循环遍历。

my_tuple = (1, 2, 3, 4, 5)

字符串 (String): 字符串是不可变的字符序列,可以通过 for 循环遍历。

my_string = "Hello"

集合 (Set): 集合是无序的,不重复的元素集合。同样可以通过 for 循环遍历。

my_set = {1, 2, 3, 4, 5}

字典 (Dictionary): 字典是键值对的集合,可以通过 for 循环遍历键或值,或者使用 items() 方法遍历键值对。

my_dict = {'a': 1, 'b': 2, 'c': 3}

# 遍历键
for key in my_dict:
    print(key)

# 遍历值
for value in my_dict.values():
    print(value)

# 遍历键值对
for key, value in my_dict.items():
    print(key, value)
 

迭代器 (Iterator): 迭代器是实现了 __iter__()__next__() 方法的对象。通常,可迭代对象通过 iter() 函数获得迭代器,迭代器通过 next() 函数获取下一个元素。

my_iterable = [1, 2, 3, 4, 5]
my_iterator = iter(my_iterable)

# 使用 next() 获取下一个元素
print(next(my_iterator))

这些都是 Python 中常见的可迭代对象,可以通过 for 循环或其他迭代方式来访问它们的元素。此外,自定义类可以通过实现 __iter__() 方法来变成可迭代对象。

class SimpleIterator:
    def __init__(self, data):
        self.data = data
        self.index = 0

    def __iter__(self):
        return self  # 返回迭代器对象,通常是自身

    def __next__(self):
        if self.index < len(self.data):
            result = self.data[self.index]
            self.index += 1
            return result
        else:
            raise StopIteration  # 迭代结束时抛出 StopIteration 异常

# 创建一个可迭代对象
my_iterator = SimpleIterator([1, 2, 3, 4, 5])

# 使用 for 循环迭代对象
for item in my_iterator:
    print(item)
 

输出

<__main__.SimpleIterator object at 0x0000015611FEFFD0>
1
2
3
4
5

Process finished with exit code 0

迭代器协议是一种 Python 协议,它定义了对象应该如何支持迭代。实现迭代器协议需要两个方法:__iter____next__

  1. __iter__ 方法:

    • 这个方法返回一个实现了 __next__ 方法的对象,通常是迭代器本身。它负责返回一个可迭代的对象。

    • 当你在使用 for 循环时,for 循环会调用 iter() 内建函数,该函数会调用对象的 __iter__ 方法,从而获取一个迭代器对象。

    • 在上述代码中,__iter__ 方法返回 self,因此迭代器对象就是对象本身。

  2. __next__ 方法:

    • 这个方法返回迭代中的下一个元素。如果没有元素可供迭代,它应该抛出 StopIteration 异常,表示迭代结束。

    • for 循环遍历对象时,它会调用对象的 __next__ 方法来获取下一个元素。

    • 在上述代码中,__next__ 方法检查索引是否小于数据的长度,如果是,返回当前索引位置的元素并将索引递增;如果不是,抛出 StopIteration 异常,表示迭代结束。

当你在使用 for 循环时,Python 会自动调用 iter() 获取迭代器对象,然后调用 next() 方法来获取下一个元素,直到 StopIteration 异常被捕获,表示迭代结束。

  • 29
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值