在许多情况下, 我们需要访问类似迭代器的对象。一种方法是形成生成器循环, 但这会延长程序员的工作量和时间。 Python通过提供内置方法来简化此任务__iter __()为此任务。
__iter __()函数返回给定对象(数组, 集合, 元组等或自定义对象)的迭代器。它创建一个对象, 该对象可以使用一次访问一个元素__next__()函数, 通常在处理循环时会派上用场。
【Python __iter__()和__next__()将对象转换为迭代器】句法 :
iter(object)
iter(callable, sentinel)
- 对象:必须创建其迭代器的对象。它可以是列表或元组之类的集合对象, 也可以是用户定义的对象(使用OOPS)。
- 可致电, 前哨:Callable表示可调用的对象, 并且sentinel是需要终止迭代的值, sentinel值表示要迭代的序列的末尾。
If we call the iterator after all the elements have
been iterated, then StopIterationError is raised.
__iter __()函数返回遍历给定对象的每个元素的迭代器对象。可以通过__next __()函数访问下一个元素。对于可调用对象和前哨值, 将进行迭代直到找到该值或到达元素的末尾。无论如何, 原始对象都不会被修改。
代码1:
# Python code demonstrating
# basic use of iter()
listA = [ 'a' , 'e' , 'i' , 'o' , 'u' ]iter_listA = iter (listA)try :
print ( next (iter_listA))
print ( next (iter_listA))
print ( next (iter_listA))
print ( next (iter_listA))
print ( next (iter_listA))
print ( next (iter_listA)) #StopIteration error
except :
pass
输出:
a
e
i
o
u
代码2:
# Python code demonstrating
# basic use of iter()
lst = [ 11 , 22 , 33 , 44 , 55 ]iter_lst = iter (lst)
while True :
try :
print (iter_lst.__next__())
except :
break
输出:
11
22
33
44
55
代码3:
# Python code demonstrating
# basic use of iter()listB = [ 'Cat' , 'Bat' , 'Sat' , 'Mat' ]iter_listB = listB.__iter__()try :
print (iter_listB.__next__())
print (iter_listB.__next__())
print (iter_listB.__next__())
print (iter_listB.__next__())
print (iter_listB.__next__()) #StopIteration error
except :
print ( " \nThrowing 'StopIterationError'" , "I cannot count more." )
输出:
Cat
Bat
Sat
Mat
Throwing 'StopIterationError' I cannot count more.
代码#4:用户定义的对象(使用OOPS)
# Python code showing use of iter() using OOPsclass Counter:
def __init__( self , start, end):
self .num = start
self .end = enddef __iter__( self ):
return selfdef __next__( self ):
if self .num>
self .end:
raise StopIteration
else :
self .num + = 1
return self .num - 1# Driver code
if __name__ = = '__main__' :a, b = 2 , 5c1 = Counter(a, b)
c2 = Counter(a, b)# Way 1-to print the range without iter()
print ( "Print the range without iter()" )for i in c1:
print ( "Eating more Pizzas, couting " , i, end = "\n" )print ( "\nPrint the range using iter()\n" )# Way 2- using iter()
obj = iter (c2)
try :
while True : # Print till error raised
print ( "Eating more Pizzas, couting " , next (obj))
except :
# when StopIteration raised, Print custom message
print ( "\nDead on overfood, GAME OVER" )
输出:
Print the range without iter()
Eating more Pizzas, couting2
Eating more Pizzas, couting3
Eating more Pizzas, couting4
Eating more Pizzas, couting5Print the range using iter()Eating more Pizzas, couting2
Eating more Pizzas, couting3
Eating more Pizzas, couting4
Eating more Pizzas, couting5Dead on overfood, GAME OVER
首先, 你的面试准备可通过以下方式增强你的数据结构概念:Python DS课程。
推荐阅读
- Python 3基础快速入门介绍
- Python __import__()函数用法介绍
- 毕达哥拉斯四重奏详细介绍
- 毕达哥拉斯定理及其反函数–三角形10级数学
- Pyspark(使用Apache MLlib的线性回归)
- Java多线程中的死锁详细介绍
- 使用reduce操作的金字塔形式(先升后降)连续数组
- #yyds干货盘点#k8s知识进阶知识,使用二进制安装包安装k8s的环境准备
- linux下MySQL忘记root密码#yyds干货盘点#