Python迭代器基本⽅法iter()及其魔法⽅法__iter__()原理详解Python迭代器的基本⽅法:iter()、next()
迭代器:
迭代器是⼀个可以记住遍历的位置的对象。
迭代器对象从集合的第⼀个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
通常在我们对iter()、next()进⾏简单使⽤时是这样的:
a=[1,2,3]
it=iter(a)#创建迭代器对象
next(it)#输出迭代器下⼀项
next(it)
next(it)
#输出:
#1
#2
#3
当看到使⽤⾃定义迭代器时,有些问题着实疑惑,看如下代码:
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))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
这是菜鸟教程给的实例
我的疑惑点:
1.iter()咋直接对实例化对象myclass直接操作了起来?
2.iter()、next()如上操作的原理是啥?内部过程是啥?
随着这些问题继续探究
2.魔法⽅法的解释
魔法⽅法是python内置⽅法,不需要主动调⽤,存在的⽬的是为了给python的解释器进⾏调⽤,⼏乎每个魔法⽅法都有⼀个对应的内置函数,或者运算符,当我们对这个对象使⽤这些函数或者运算符时就会调⽤类中的对应魔法⽅法,可以理解为重写这些python的内置函数。
我们在调⽤python类中的某个⽅法时,通常会看到某些特殊的⽅法,它们总被双下划线所包围,像这种格式:"__ ⽅法名__",这些⽅法很强⼤,充满魔⼒,可以让你实现很多功能。如果你的对象实现(重载)了这些⽅法中的某⼀个,那么这个⽅法就会在特殊的情况下被Python 所调⽤,你可以定义⾃⼰想要的⾏为,⽽这⼀切都是⾃动发⽣的。
重点提取:
1.魔法⽅法:__ ⽅法名 __,如:
__iter__(self)
__next__(self)
2.当我们对⼀个实例化对象使⽤内置函数时(这个实例化对象中我们⾃定义了与这个内置函数对应的魔法⽅法),相当于我们对这个内置函数进⾏了重写再使⽤
3.以内置函数iter()为例详解魔法函数的重写(⾃定义)
3.1⾸先来看iter():
重点:当我们不考虑设置iter()的第2个参数时,第⼀个参数object必须是⽀持__iter__()⽅法的(可迭代的),也即iter()调⽤其
菜鸟教程python函数__iter__()返回⼀个迭代器对象
3.2由迭代器对象及其⽅法next()来分析:
提取重点:
1.对迭代器对象使⽤__next__()⽅法或next()⽅法来以此输出迭代器对象数据项
<()调⽤__next__()⽅法
经以上分析,我们可以得到最开始的⽰例代码的实际内涵了:
1.在类中我们对__iter__()和__next__()进⾏了重写,这俩⽅法是魔法⽅法
2.在对该类实例化对象使⽤iter()内置函数时,iter()调⽤我们重写的__iter__()⽽不是其原本的,返回self。同样的,对myiter 使⽤next()内置函数时也即调⽤我们重写的__next__()⽽不是原来的。
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))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论