python学习--迭代器

Python有三大神器:迭代器、生成器、装饰器;

一、迭代(Iteration)、可迭代对象(Iterable)

在Python中数据类型list、touple、str、dict、set均可通过for循环进行遍历,通过for循环的这种遍历就称为迭代

以上几种类型都是可迭代对象(Iterable)

在python中可通过函数isinstance() 判断一个对象是否是 Iterable 对象。

from collections import Iterable

a = 123
print(isinstance(a,Iterable))

b = ["abc",2,3]
print(isinstance(b,Iterable))

c = {"name":"xiaobai"}
print(isinstance(c,Iterable))

运行结果:

 二、迭代器(Iterator

能被函数next()调用并不断返回下一个值的对象称为迭代器-Iterator

也可用函数isinstance()判断一个对象是否是迭代器。

a = ["abc",2,3]
print(isinstance(a,Iterator))    # False

b = {"name":"xiaobai"}
print(isinstance(b,Iterator))    # False

c = (1,2,3)
print(isinstance(c,Iterator))    # False

运行结果:

由此可见上面所说的几种类型虽然是可迭代对象(Iterable)但并不是迭代器(Iterator);

可使用函数iter()将可迭代对象(Iterable)变为迭代器(Iterator)。

from collections import Iterable,Iterator

a = "100"
new_a = iter(a)
print(new_a)
print(isinstance(new_a,Iterator))

运行结果:

三、迭代器的两个基本方法:iter()和next()

函数iter():创建一个迭代器

函数next():不断返回迭代器的下一个值

# 迭代器的两个方法
a = ["","绿",""]
iter_a = iter(a)        # 创建迭代器
print(iter_a)

print(next(iter_a))     # next()返回迭代器的下一个值
print(next(iter_a))
print(next(iter_a))
print(next(iter_a))     # next()取值取到没有了会抛出StopIteration异常

运行结果:

next()取值取到没有时会抛异常,通过try..except取出全部值

# 用next()取到全部值
a = ["","绿",""]
iter_a = iter(a)        # 创建迭代器

while True:
    try:
        print(next(iter_a))
    except StopIteration:
        break

运行结果:

迭代器也可以使用for循环进行遍历:

# 使用for循环遍历
a = ["","绿",""]
iter_a = iter(a)        # 创建迭代器

for i in iter_a:
    print(i)

四、将类作为迭代器使用

把一个类作为一个迭代器使用需要在类中实现两个方法 __iter__()__next__()

__iter__() 方法返回一个特殊的迭代器对象, 这个迭代器对象实现了__next__() 方法并通过 StopIteration 异常标识迭代的完成。

__next__() 方法(Python 2 里是 next())会返回下一个迭代器对象。

创建一个返回数字的迭代器,初始值为 1,逐步递增 1:

# 创建一个返回数字的迭代器,初始值为 1,逐步递增 1
class MyIter:
    def __iter__(self):
        self.a = 1
        return self         # 返回一个迭代器对象,

    def __next__(self):     # 返回下一个值
        b = self.a
        self.a += 1
        return b

iternumbers = MyIter()
myiter = iter(iternumbers)
print(next(myiter))
print(next(myiter))

运行结果:

1
2

Process finished with exit code 0

 

原文地址:https://www.cnblogs.com/ddxxn/p/14475953.html