zoukankan      html  css  js  c++  java
  • pytion3--用户定义的迭代器

    1、迭代器基于下面两个个方法:

    (1)__next__ 返回容器的下一个项目
    (2)__iter__ 返回迭代器本身

    2、当序列遍历完时,将抛出StopIteration异常,所以通过捕获这个异常来停止循环

    下面是自定义迭代器的示例代码:

    class MyIterator(object):
        def __init__(self, step):
            self.step = step
    
        def __next__(self):
            if self.step == 0:
                raise StopIteration
            self.step -= 1
            return self.step
    
        def __iter__(self):
            return self
    
    for i in MyIterator(6):
        print(i)
    

    运行结果:

    5
    4
    3
    2
    1
    0
    

    用户定义的迭代器

    如今,Python中所有的迭代坏境都会先尝试__iter_二方法,再尝试__getite。_。也就是说,它们宁愿使角第13章所学到的迭代协议,然后才是重复对对象进行索弓l运算。如果对象不支持迭代协议,就会尝试索引运算。从技术角度来讲,迭代环境是通过调用内置函数iter去尝试寻找iter方法来实现的,而这种方法应该返回一个迭代器对象。如果已经提供了,Python就会重复调用这个迭代器对象的next方法,直到发生stop工teration异常。如果没找到这类__iter__方法,Python会改用__getitem__机制,就像之前那样通过偏移量重复索引,直到引发
    IndexError异常。

    下面的文件iters.py定义了用户定义的迭代器类来生成平方值。

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    
    class Squares:
        def __init__(self, start, stop):
            self.value = start - 1
            self.stop = stop
        def __iter__(self):
            return self
        def __next__(self):
            if self.value == self.stop:
                raise StopIteration
            self.value += 1
            return self.value **2
    
    for i in Squares(1, 5):
        print(i)
    

    运行结果:

      

    1
    4
    9
    16
    25
    
    # 用生成器函数编写
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    
    # 用生成器函数编写
    
    def gsquares(start, stop):
        for i in range(start, stop+1):
            yield i ** 2
    
    for i in gsquares(1, 5):
        print(i, end=" ")
    

    运行结果:

    1 4 9 16 25 
    
  • 相关阅读:
    db2 v11 安装测试
    DB2支持的三种表空间SMS、DMS、DMS的自动存储
    linux几种快速清空文件内容的方法
    修改文件或者文件夹权限
    db2start启动失败
    db2icrt创建实例,提示主机名无效
    浏览器内核以及在各个浏览器的前缀
    程序的三大结构(顺序结构、选择结构、循环结构)
    数组中元素的排序(常用的冒泡排序、选择排序、快速排序)
    数组的api以及api的简单使用
  • 原文地址:https://www.cnblogs.com/chenlin163/p/7305401.html
Copyright © 2011-2022 走看看