当前位置:
首页 > Python基础教程 >
-
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
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
原文链接:https://blog.csdn.net/qq_19404693/article/details/124448238
栏目列表
最新更新
求1000阶乘的结果末尾有多少个0
详解MyBatis延迟加载是如何实现的
IDEA 控制台中文乱码4种解决方案
SpringBoot中版本兼容性处理的实现示例
Spring的IOC解决程序耦合的实现
详解Spring多数据源如何切换
Java报错:UnsupportedOperationException in Col
使用Spring Batch实现批处理任务的详细教程
java中怎么将多个音频文件拼接合成一个
SpringBoot整合ES多个精确值查询 terms功能实
SQL Server 中的数据类型隐式转换问题
SQL Server中T-SQL 数据类型转换详解
sqlserver 数据类型转换小实验
SQL Server数据类型转换方法
SQL Server 2017无法连接到服务器的问题解决
SQLServer地址搜索性能优化
Sql Server查询性能优化之不可小觑的书签查
SQL Server数据库的高性能优化经验总结
SQL SERVER性能优化综述(很好的总结,不要错
开启SQLSERVER数据库缓存依赖优化网站性能
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比