#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的异常。
总结
我想到这里各位心中可能会想到另一个类似的概念 递归
迭代 | 递归 |
---|---|
允许重复使用条件循环执行顺序的一组语句。 | 函数主体中的语句调用函数本身。 |
存在带有需要初始化,递增或递减的控制变量的循环以及不断检查执行终止的条件控制语句。 | 递归函数必须包含至少一个基本情况,即终止执行的条件。 |
这是迭代:
这是递归:
这仅是对目前我遇到的迭代器进行简单的总结,欢迎批评指正。
.