python之__iter__函数与__next__函数
2017-08-18 17:59
621 查看
容器(container)
容器是用来储存元素的一种数据结构,容器将所有数据保存在内存中,Python中典型的容器有:list,set,dict,str等等。class test(): def __init__(self,data=1): self.data = data def __iter__(self): return self def __next__(self): if self.data > 5: raise StopIteration else: self.data+=1 return self.data for item in test(3): print(item)
4 5 6
for … in… 这个语句其实做了两件事。第一件事是获得一个可迭代器,即调用了__iter__()函数。
第二件事是循环的过程,循环调用__next__()函数。
对于test这个类来说,它定义了__iter__和__next__函数,所以是一个可迭代的类,也可以说是一个可迭代的对象(Python中一切皆对象)。
迭代器
含有__next__()函数的对象都是一个迭代器,所以test也可以说是一个迭代器。如果去掉__itet__()函数,test这个类也不会报错。如下代码所示:class test(): def __init__(self,data=1): self.data = data def __next__(self): if self.data > 5: raise StopIteration else: self.data+=1 return self.data t = test(3) for i in range(3): print(t.__next__())
4 5 6
生成器
生成器是一种特殊的迭代器。当调用fib()函数时,生成器实例化并返回,这时并不会执行任何代码,生成器处于空闲状态,注意这里prev, curr = 0, 1并未执行。然后这个生成器被包含在list()中,list会根据传进来的参数生成一个列表,所以它对fib()对象(一切皆对象,函数也是对象)调用__next()__方法,def fib(end = 1000): prev,curr=0,1 while curr < end: yield curr prev,curr=curr,curr+prev print(list(fib()))
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987]
相关文章推荐
- python中的iter()函数与next()函数
- 对python中的iter()函数与next()函数详解
- python中的next()以及iter()函数
- 详解Python中的分组函数groupby和itertools)
- [转]可爱的 Python:: 使用 itertools 模块中的组合函数
- python中迭代器和iter()函数
- [Python标准库]itertools——迭代器函数
- python iter( )函数
- 零基础学python-13.2 手动迭代:iter和next
- Python yield与send,iter与next
- 零基础学python-13.2 手动迭代:iter和next
- Python中的分组函数(groupby、itertools)
- 迭代器就是重复地做一些事情,可以简单的理解为循环,在python中实现了__iter__方法的对象是可迭代的,实现了next()方法的对象是迭代器,这样说起来有
- python中迭代器和iter()函数
- 零基础学python-13.2 手动迭代:iter和next
- python中itertools模块zip_longest函数详解
- python : items()和iteritems()函数
- Python 内建函数 - iter(object[, sentinel])
- python类中的__iter__, __next__与built-in的iter()函数举例
- python迭代器:next( ),__next__( ), iter()