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

 更新时间:2024年02月19日 09:18:12   作者:正努力改变自己的人  
这篇文章主要介绍了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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • python 抓取知乎指定回答下视频的方法

    python 抓取知乎指定回答下视频的方法

    这篇文章主要介绍了python 抓取知乎指定回答下视频的方法,文中讲解非常详细,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • Opencv求取连通区域重心实例

    Opencv求取连通区域重心实例

    这篇文章主要介绍了Opencv求取连通区域重心实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • Python中计算相似度的方法详解

    Python中计算相似度的方法详解

    计算相似度是许多机器学习和数据分析任务中的重要步骤,尤其是在推荐系统、文本分析和图像处理等领域,下面我们就来看看具体的实现方法吧
    2025-02-02
  • Python爬虫实现selenium处理iframe作用域问题

    Python爬虫实现selenium处理iframe作用域问题

    这篇文章主要介绍了Python爬虫实现selenium处理iframe作用域问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Python产生Gnuplot绘图数据的方法

    Python产生Gnuplot绘图数据的方法

    今天小编就为大家分享一篇Python产生Gnuplot绘图数据的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • Mac版Python3安装/升级的方式

    Mac版Python3安装/升级的方式

    这篇文章主要介绍了Mac版Python3安装/升级的方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • 基于Python代码编辑器的选用(详解)

    基于Python代码编辑器的选用(详解)

    下面小编就为大家带来一篇基于Python代码编辑器的选用(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • python验证身份证信息实例代码

    python验证身份证信息实例代码

    这篇文章主要介绍了python验证身份证信息的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • Python如何批量处理经纬度数据并生成位置信息

    Python如何批量处理经纬度数据并生成位置信息

    这篇文章主要介绍了Python如何批量处理经纬度数据并生成位置信息问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • CentOS7下安装python3.6.8的教程详解

    CentOS7下安装python3.6.8的教程详解

    这篇文章主要介绍了CentOS7下安装python3.6.8的教程,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01

最新评论