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

Posted 酸果实爱吐泡泡的鱼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python2.7 可迭代对象迭代器和迭代的概念说明相关的知识,希望对你有一定的参考价值。

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

1 概念

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

迭代器一定是可迭代对象,可迭代对象不一定是迭代器对象,文件对象本身就是一个迭代器对象

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

以上是关于python2.7 可迭代对象迭代器和迭代的概念说明的主要内容,如果未能解决你的问题,请参考以下文章

python的迭代器和生成器

理解迭代器和可迭代对象

可迭代对象迭代器和生成器

python迭代器和可迭代对象

python迭代器和可迭代对象

python迭代器和可迭代对象