python如何定义一个迭代器去生成偶数数列,


目录
  • 定义一个迭代器去生成偶数数列
  • python用户定义的迭代器
    • 迭代器基于下面两个方法
    • 当序列遍历完时
    • 用户定义的迭代器
  • 总结

    定义一个迭代器去生成偶数数列

    #创建迭代器类
    class EvenIterator:
        def __init__(self,min_value,max_value):
            # 初始化参数
            self.min_value = min_value 
            self.max_value = max_value
             
        def __iter__(self):
            return self
        def __next__(self):
            # 在这里定义好累加条件
            if self.min_value % 2 != 0:#判断最小值是不是偶数,不是则加1
                self.min_value += 1
            if self.min_value <= self.max_value:
                x = self.min_value
                self.min_value += 2
                return x
            else:#抛出 StopIteration异常,结束代码
                raise StopIteration
    
    min_value = int(input("输入需要生成偶数序列范围的最小值"))
    max_value = int(input("输入需要生成偶数序列范围的最大值"))
    num2 = EvenIterator(min_value,max_value) #创建迭代器对象
    print([i for i in num2],end="")#输出偶数数组
    
    

    python用户定义的迭代器

    迭代器基于下面两个方法

    (1)__next__ 返回容器的下一个项目

    (2)__iter__ 返回迭代器本身

    当序列遍历完时

    将抛出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定义了用户定义的迭代器类来生成平方值。

    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
    #Python小白学习交流群:711312441 
    for i in Squares(1, 5):
        print(i)
    

    运行结果:

    1
    4
    9
    16
    25

    用生成器函数编写

    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

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持3672js教程。

    您可能感兴趣的文章:
    • 一文搞懂​​​​​​​python可迭代对象,迭代器,生成器,协程
    • python 协程中的迭代器,生成器原理及应用实例详解
    • 快速进修Python指南之迭代器Iterator与生成器
    • Python迭代器、生成器、协程使用方式

    评论关闭