Python 迭代器

#Python 迭代器# 系列文章目录
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

您将学习迭代器的工作原理以及如何使用__iter__和__next__方法构建自己的迭代器。

一、python中的迭代器的性质

1 迭代是一个重复反馈的过程,每次对过程的重复称为一次迭代,而每次迭代的结果又会称为下一次的初始值。

2 从技术上讲,Python 迭代器对象必须实现两个特殊方法,iter()next()统称为迭代器协议。

3 如果我们可以从对象获得迭代器,则该对象称为可迭代。Python中大多数内置容器(例如:list,tuple,string等)都是可迭代的。
但是要注意的是对于 set(集合)迭代器是访问元素的唯一方式。

3 该iter()函数(依次调用该__iter__()方法)从它们返回一个迭代器。
代码如下(示例):

    def __iter__(self):
        return self

二、迭代函数

1普通函数

代码如下(示例):

string = 'I love python'
it = iter(string) # 使用一个iter()获取一个迭代器
for i in string:
    print(next(it))  # 这里等同于print(i)
    pass

结果如下:

l
o
v
e

p
y
t
h
o
n
使用next()将返回下一个item 当我们到达末尾并且没有更多数据要返回时,它将引发StopIteration。
代码如下(示例):

it = iter(range(10))
while True:
    try:
        print(next(it))
    except StopIteration:
        break
    pass

2.魔术方法

代码如下(示例):

class Fibs:  # 构造一个类输出斐波那契数列
    def __init__(self):
        self.a = 0
        self.b = 1
        pass

    def __iter__(self):  
    # 这个魔术方法的写法是固定的(当然你也可以加入一些初始化)
        return self

    def __next__(self):
        c = self.b
        self.b = self.a + self.b
        self.a = c
        return self.a
    pass
  
fibs = Fibs()
for each in fibs:
    if each < 20:
        print(each)
        pass
    else:
        break
    pass

结果:
1
1
2
3
5
8
13
__next()__魔术方法会被不断调用,上一次调用的结果将会成为下一次的初始值。直到抛出StopIteration的异常。

总结

我想到这里各位心中可能会想到另一个类似的概念 递归

迭代递归
允许重复使用条件循环执行顺序的一组语句。函数主体中的语句调用函数本身。
存在带有需要初始化,递增或递减的控制变量的循环以及不断检查执行终止的条件控制语句。递归函数必须包含至少一个基本情况,即终止执行的条件。

这是迭代:
在这里插入图片描述
这是递归:
递归

这仅是对目前我遇到的迭代器进行简单的总结,欢迎批评指正。

.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 在Python中,是一种用于遍历可代对象的对象。一个对象要成为,需要实现两个方法:__iter__和__next__。__iter__方法返回本身,而__next__方法返回下一个对象。\[1\] 本身也是可代的,所以它也要实现__iter__方法并返回自身。\[1\] 一个对象只有同时实现了__iter__和__next__方法,才能被称为。\[1\] 在Python中,可代对象是指实现了__iter__方法的对象。可代对象可以使用isinstance()函数来判断是否是可代对象。\[1\] 是可代对象的一种特殊形式,它具有返回下一个对象的功能。\[2\] 可以使用isinstance()函数来判断一个对象是否是。\[2\] 下面是一个示例代码,展示了如何实现一个和一个可代对象: ```python class MyIterator: def __init__(self, data): self.data = data self.index = 0 def __iter__(self): return self def __next__(self): if self.index >= len(self.data): raise StopIteration value = self.data\[self.index\] self.index += 1 return value class MyIterable: def __init__(self): self.data = \[\] def add(self, item): self.data.append(item) def __iter__(self): return MyIterator(self.data) myIterable = MyIterable() myIterable.add(1) myIterable.add(2) myIterable.add(3) print(isinstance(myIterable, Iterable)) # 输出True,表示myIterable是可代对象 print(isinstance(myIterable, Iterator)) # 输出False,表示myIterable不是 for item in myIterable: print(item) # 输出1、2、3 ``` 在上面的示例中,MyIterator是一个,它实现了__iter__和__next__方法。MyIterable是一个可代对象,它实现了__iter__方法并返回一个对象。通过使用isinstance()函数,我们可以判断一个对象是否是可代对象或。\[1\]\[2\] #### 引用[.reference_title] - *1* [Python(Iterator)](https://blog.csdn.net/weixin_45068714/article/details/126863082)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Python (Iterator)](https://blog.csdn.net/qq_45807032/article/details/105219674)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值