知行编程网知行编程网  2022-12-12 01:30 知行编程网 隐藏边栏  3 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于Python之可迭代对象、迭代器、生成器的相关知识,包括迭代器和迭代对象本质区别,以及python 迭代对象这些编程知识,希望对大家有参考作用。


Python的可迭代对象、迭代器、生成器


Python可迭代对象(Iterable)

Python中经常使用for来遍历一个对象,此时遍历的对象是一个可迭代的对象,比如常见的列表、元组等。如果你给出一个准确的定义,只要定义了可以返回迭代器的__iter__方法,或者定义了可以支持下标索引的__getitem__方法,那么它就是一个可迭代对象。


Python迭代器(iterator)

迭代器是通过next()实现的,每次调用都会返回下一个元素,没有下一个元素时返回StopIteration异常,所以定义这个方法的其实是一个迭代器。你可以通过下面的例子来体验迭代器:


生成器(Generators)

生成器是构造迭代器的最简单和最强大的工具。与普通函数不同,返回值时使用yield代替return,然后yield会自动构建next()和iter()

因为迭代器太常用了,python专门为for关键字做了迭代器的语法糖。在for循环中,Python会自动调用工厂函数iter()获取迭代器,自动调用next()获取元素,同时也完成检查StopIteration异常的工作。


定义迭代器

下面一个例子——斐波那契数列

# -*- coding: cp936 -*-
class Fabs(object):
    def __init__(self,max):
        self.max = max
        self.n, self.a, self.b = 0, 0, 1  #特别指出:第0项是0,第1项是第一个1.整个数列从1开始
    def __iter__(self):
        return self
    def next(self):
        if self.n < self.max:
            r = self.b
            self.a, self.b = self.b, self.a + self.b
            self.n = self.n + 1
            return r
        raise StopIteration()

print Fabs(5)
for key in Fabs(5):
    print key

结果

<__main__.Fabs object at 0x01A63090>
1
1
2
3
5

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享