@songying
2018-11-14T16:50:17.000000Z
字数 1752
阅读 1167
python高级特性
Python 高级编程之初识迭代器
https://blog.csdn.net/baidu_35085676/article/details/78954805
__iter__()
方法__next__()
方法,返回当前元素,并指向下一个元素的位置,如果当前位置已无元素,则抛出StopIteration异常。所谓迭代,就是依次遍历一个序列中的每个元素的过程。比如说我们通过for来访问一个list中的所有元素的整个过程,就叫做迭代。
不懂的可以参见:廖雪峰:迭代
__iter__
方法,那么该对象就是可迭代的。__getitem__
方 简单来说,可迭代对象其实就是一个容器,你能够用for来遍历它的所有元素。实际上, 只要实现了__iter__
方法的对象就是可迭代对象。
在python中,可以直接作用于for循环的对象统称为可迭代对象,这类对象包括两类:
# 判断一个对象是否为 Iterable 对象
from collections import Iterable
isinstance([], Iterable)
迭代器必须遵守迭代器协议。
可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。
标准的迭代器接口(collection.abc.Iterator)有两个方法:__next__
与 __iter__
, 也就是说任意对象,只要实现了__next__
方法(python3)和__iter__
方法, 那么它就是一个迭代器。__next__
方法返回容器中的下一个值; __iter__
方法返回迭代器自身。
生成器都是Iterator对象,但list、dict、str虽然是Iterable,却不是Iterator。
# 判断一个对象是否为Iterator 对象
from collections import Iterator
isinstance([], Iterator)
__iter__
方法, 那么该对象是可迭代对象; __next__
与__iter__
方法,那么该对象是迭代器。 在python中, 提供了内置函数 iter()
来将可迭代对象转化为迭代器。 在python中的可迭代对象有: list, dict, str,set, tuple等。
我们可以用类实现一个迭代器,在类中添加
next
方法和__iter__
方法。
# 我们实现一个类似于 xrange 的产生整数序列的迭代器
class yrange:
def __init__(self, start=0, stop=0):
self.start = start
self.stop = stop
def __iter__(self):
return self
def next(self):
if(self.start < self.stop):
start = self.start
self.start += 1
return start
else:
raise StopIteration
Python内置的一些函数如 list
、sum
、sorted
都支持迭代器作为参数
可迭代对象可以通过Python内置函数 iter
来生成一个迭代器(iterator)。
在Python中通过 iter
函数生成的对象叫做迭代器,而本身支持迭代的对象叫做可迭代对象。
Iterator = iter(list) # 产生迭代器
Iterator.next() # 迭代器的下一个元素
for i in list: # 自动迭代,for 循环语句在迭代时,自动调用了内置的 iter 来生成迭代器,省去了我们手动使用 iter(L) 生成迭代器这一步。