📜  Python中的迭代器

📅  最后修改于: 2020-01-17 14:20:19             🧑  作者: Mango

Python中的Iterator是可以与“ for循环”一起使用的任何Python类型。Python列表,元组,字典和集合都是内置迭代器的。这些类型是迭代器,因为它们实现以下方法。实际上,任何想要成为迭代器的对象都必须实现以下方法。

  1. 初始化迭代器时调用的__iter__方法。这应该返回一个具有next(Python 2.X)或__next__(在Python 3中)方法的对象。
  2. next(在Python 3中为__next__) iterator next方法应返回iterable的下一个值。当迭代器与“ for in”循环一起使用时,for循环会隐式调用迭代器对象上的next()。此方法应在遍历元素之后触发StopIteration,以指示迭代结束。

下面是一个简单的Python程序,该程序创建从10到给定限制的迭代器类型。例如,如果limit为15,则打印10 11 12 13 1415。如果limit为5,则不打印任何内容。

# Python代码,展示迭代器使用
# 用户定义的迭代器
class Test:
    # 构造器
    def __init__(self, limit):
        self.limit = limit
    # 初始化时调用
    def __iter__(self):
        self.x = 10
        return self
    # 在Python 3, 实现 __next__ 方法
    def next(self):
        # 储蓄当前x的值
        x = self.x
        # 如果到达末端,停止迭代
        if x > self.limit:
            raise StopIteration
        # 否则不断迭代
        self.x = x + 1;
        return x
# 打印数字:10 到 15
for i in Test(15):
    print(i)
# 什么都不打印
for i in Test(5):
    print(i)

输出:

10
11
12
13
14
15

内置迭代器类型的示例:

# 内置迭代器例子
# 迭代一个list
print("list迭代")
l = ["芒果", "for", "芒果"]
for i in l:
    print(i)
# 迭代一个tuple (不可变)
print("\nTuple迭代")
t = ("芒果", "for", "芒果")
for i in t:
    print(i)
# 迭代string
print("\nString迭代")
s = "芒果"
for i in s :
    print(i)
# 迭代dictionary
print("\nDictionary迭代")
d = dict()
d['xyz'] = 123
d['abc'] = 345
for i in d :
    print("%s  %d" %(i, d[i]))

输出:

List迭代
芒果
for
芒果
Tuple迭代
芒果
for
芒果
String迭代
G
e
e
k
s
Dictionary迭代
xyz  123
abc  345