python2.7 可迭代对象、迭代器和迭代的概念说明

描述python 中 可迭代对象,迭代器和迭代的概念

1 概念

  • 可迭代对象:只要定义了__iter__()方法,就说该对象是可迭代对象,并且可迭代对象能提供迭代器.例如: str,list,tuple,dict,set,文件对象
在自定义可迭代对象需要实现 __iter__ 函数;严格来讲,还需要实现 __getitem__ 函数,这个函数的主要作用是当前对象可通过下标取值
  • 迭代器:实现了__next__()或者next()(python2)方法的称为迭代器,迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁,因此只占用固定的内存。
1.既内置有__next__方法的对象,执行该方法可以不依赖索引取值
2.又内置有__iter__方法的对象,执行迭代器的__iter__方法得到的依然是迭代器本身

迭代器一定是可迭代对象(一是实现了__next__()或next() 方法,二是实现了__iter__() 方法),可迭代对象不一定是迭代器对象,文件对象本身就是一个迭代器对象

使用内置的 iter() 函数可以根据一个可迭代对象返回一个迭代器对象。

my_string = "hello"
my_iter = iter(my_string)
next(my_iter)
# Output: 'h'

python处理迭代器越界是抛出StopIteration异常.

  • 迭代:当使用一个循环来遍历某个东西时,这个过程本身就叫迭代。迭代器迭代的元素只能往前不能后退。

  • 生成器:带有 yield 的函数在 Python 中被称之为 generator(生成器)。生成器也是一种迭代器,yield 的作用就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator。

2 示例

#!/usr/bin/env python 
# -*- coding: utf-8 -*-
from collections import Iterable, Iterator

class IterableFunc(object):
    """
    定义可迭代对象   Iterable
    """
    def __init__(self):
        self.capacity = []

    def add_capacity(self, cap1):
        """

        :param cap1:
        :return:
        """
        if isinstance(cap1, (str, int, float)):
            self.capacity.append(cap1)
        elif isinstance(cap1, list):
            self.capacity.extend(cap1)
        elif isinstance(cap1, dict):
            return

    def __getitem__(self, item):
        if self.capacity:
            return self.capacity[item]

    def __iter__(self):
        for cap in self.capacity:
            yield cap

    def next(self):
        if self.capacity:
            return self.capacity.pop()


if __name__ == '__main__':
    func = IterableFunc()
    func.add_capacity([1, 2, 3, 4])

    print isinstance(func, Iterable)  # True
    print isinstance(func, Iterator)  # True

    for c in func:
        print c
种一棵树最好的时间是十年前,其次是现在!
原文地址:https://www.cnblogs.com/gaozhidao/p/12950454.html