python中reversed函数_Python 的iter、reversed、next内置函数探讨
本文主要探讨下列三种方法:
object.__iter__(self)
此方法在需要为容器创建迭代器时被调用。此方法应该返回一个新的迭代器对象,它能够逐个迭代容器中的所有对象。对于映射,它应该逐个迭代容器中的键。
迭代器对象也需要实现此方法;它们需要返回对象自身。
object.__reversed__(self)
此方法(如果存在)会被 reversed内置函数调用以实现逆向迭代。它应当返回一个新的以逆序逐个迭代容器内所有对象的迭代器对象。
object.__next__(self)
从容器中返回下一项。 如果已经没有项可返回,则会引发 StopIteration 异常。
iter 与 next
例子
class MyNumbers:
def __init__(self):
pass
def __iter__(self):
self.a=0
return self
def __next__(self):
x=self.a+1
if self.a>=5:
raise StopIteration
self.a+=1
return x
myclass = MyNumbers()
myiter = iter(myclass)
for x in myiter:
print(x)
运行结果
1
2
3
4
5
reversed与next
代码如下:
class MyNumbers:
def __init__(self):
pass
def __reversed__(self):
self.a=0
return self
def __next__(self):
x=5-self.a
if self.a>=5:
raise StopIteration
self.a+=1
return x
myclass = MyNumbers()
myrv=reversed(myclass)
print(next(myrv))
print(next(myrv))
print(next(myrv))
print(next(myrv))
print(next(myrv))
# 以下代码不能运行,会报错
# TypeError: 'MyNumbers' object is not iterable
# for i in myrv:
# print(i)
返回结果
5
4
3
2
1
为什么用 for in 的方法会报错呢?
主要因为in后面要跟迭代器,而该类没有实现迭代器的方法,即iter。当直接使用next() 方法时,会调用类中的函数next,所以不会报错 。当然,你也可以在reversed函数中,生成所需要的迭代器并返回,这样就可以使用for in这种遍历方法 。
iter、reversed和next
class MyNumbers:
def __init__(self):
self.flag=True
pass
def __iter__(self):
self.a=0
return self
def __reversed__(self):
self.a=0
self.flag=not self.flag
return self
def __next__(self):
if self.flag:
x=self.a+1
if self.a>=5:
raise StopIteration
else:
x=5-self.a
if self.a>=5:
raise StopIteration
self.a+=1
return x
myclass = MyNumbers()
myiter = iter(myclass)
print('iter-next')
for x in myiter:
print(x)
print('reversed-next')
myrv=reversed(myclass)
print(next(myrv))
print(next(myrv))
print(next(myrv))
print(next(myrv))
print(next(myrv))
print('reversed-reversed')
myrv=reversed(myclass)
for i in myrv:
print(i)
运行结果
iter-next
1
2
3
4
5
reversed-next
5
4
3
2
1
reversed-reversed
1
2
3
4
5
本例中直接实现了iter和reversed 两种方法。主要设置一个标志位,通过reversed改变标志位来设置是正序输出还是反序输出,通过多次调用reversed可以进行反转。
在执行for in前执行reversed的时候实现调用顺序是reversed->iter->next->next->...
python中reversed函数_Python 的iter、reversed、next内置函数探讨相关推荐
- python中比较重要的几个函数_Python 几个重要的内置函数 python中的内置函数和关键字需要背过吗...
python重要的几个内置函数用法 python内置函数什么用忘不掉的是回忆,继续的是生活,错过的,就当是路过吧.来来往往身边出现很多人,总有一个位置,一直没有变.看看温暖的阳光,偶尔还是会想一想. ...
- python拟合三元函数_python基础教程之常用内置函数、三元运算、递归
目录 常用内置函数 abs/round/sum eval/exec enumerate max/min sorted zip map filter 补充:reduce lambda 初识递归 再谈递归 ...
- python len函数_Python 初学者必备的常用内置函数
Python 作为一门高级编程语言,为我们提供了许多方便易用的内置函数,节省了不少开发应用的时间.目前,Python 3.7 共有 69 个内置函数,一些是我们耳熟能详的函数,另一些却不是很常见,这里 ...
- inrange函数_Python 初学者必备的常用内置函数
本文纲要 Python 作为一门高级编程语言,为我们提供了许多方便易用的内置函数,节省了不少开发应用的时间.目前,Python 3.7 共有 69 个内置函数,一些是我们耳熟能详的函数,另一些却不是很 ...
- python字典经典例题_python 字典(Dictionary)的一些内置函数和经典例题
字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 修改字典 向字典添加新 ...
- python用psf函数_python学习之-类的内置函数
内置方法:__str__(该方法必须返回字符串类型),在对像被打印时自动触发,然后将该方法的返回值当做打印结果输出) class People: def __init__(self,name,age) ...
- python求最小值不能使用min和sotred_python基础——内置函数
python基础--内置函数 一.内置函数(python3.x) 内置参数详解官方文档: https://docs.python.org/3/library/functions.html?highl ...
- python 倒叙 数组_Python函数合集:68个内置函数请收好!
内置函数就是python给你提供的, 拿来直接用的函数,比如print.,input等.截止到python版本3.6.2 python一共提供了68个内置函数. #68个内置函数 # abs() di ...
- python我想对你说_python学习第12天----内置函数
1.内置函数 python解释器提供的,直接可以使用的函数,如print,input等 1)作业域相关 ①globals() 以字典的类型返回全部局部变量 ②locals() 以字典的类型返回当前 ...
- python lambda 逻辑_Python之lambda表达式和内置函数
lambda表达式其实就是简化的函数表达式. 它只用于处理简单逻辑, 它会自动return数据 通常定义一个函数,按照以下形式:def func(arg): return arg +1 result ...
最新文章
- labview曲线上两点画延长线_教你用直尺画各种几何图形
- OFBiz + Opentaps 目录管理 四. 产品(四)礼券
- CentOS TinyProxy http(s)上网代理及置代理上网的方法
- 【POJ 3276】【开关问题】Face The Right Way【暑期 No.4】
- LCD1602芯片的使用——简单易懂
- caxa发生文件读写异常_CAXA电子图板出错解决方法
- FPGA基础入门【14】开发板VGA视频输出控制
- rtl8188linux内核配置,Embeded linux之RTL8188EU/RTL8188ETV使用
- eps提取高程点在哪里_只需一个命令,就能提取CAD图纸所有高程点坐标,感觉学费白交了...
- Typescript泛型与implements子句
- Linux 交换分区
- 写一个strncpy(char *dest, const char *src, size_t cpy_lent) 的函数
- 树莓派 人体感应器HC-SR501的应用
- 打印机故障处理【以MP 3054sp 打印机为例】
- 木瓜移动:从KOL到内容营销,出海品牌如何争夺流量新战场
- 校园网络的规划与实施(思科)
- Python实现模拟按键刷搜狗拼音输入法字数
- 3DMark 2005 Build 120
- 电源特性测试测试哪些方面?电源特性自动测试系统NSAT-8000介绍
- 【线下沙龙】如何用项目管理的思维经营自己的生活