Python|可迭代和迭代器之间的区别
Iterable是一个可以迭代的对象。它在传递给iter()
方法时生成一个迭代器。 Iterator是一个对象,用于使用 __next__() 方法对可迭代对象进行迭代。迭代器有__next__()
方法,它返回对象的下一项。
请注意,每个迭代器也是一个可迭代的,但不是每个可迭代的都是一个迭代器。例如,列表是可迭代的,但列表不是迭代器。可以使用函数iter()
从可迭代对象创建迭代器。为了使这成为可能,一个对象的类需要一个方法__iter__
,它返回一个迭代器,或者一个具有从 0 开始的顺序索引的__getitem__
方法。
代码#1 :
for city in ["Berlin", "Vienna", "Zurich"]:
print(city)
print("\n")
for city in ("Python", "Perl", "Ruby"):
print(city)
print("\n")
for char in "Iteration is easy":
print(char, end = " ")
输出 :
Berlin
Vienna
Zurich
Python
Perl
Ruby
I t e r a t i o n i s e a s y
当一个 for 循环被执行时,for 语句在对象上调用iter()
,它应该循环。如果此调用成功,则 iter 调用将返回一个迭代器对象,该对象定义方法__next__()
,该方法一次访问一个对象的元素。如果没有其他可用元素, __next__()
方法将引发StopIteration
异常。 for 循环将在捕获到 StopIteration 异常后立即终止。让我们使用 next() 内置函数调用__next__()
方法。
代码 #2:如果对象 'obj' 是可迭代对象,函数'iterable' 将返回 True,否则返回 False。
# list of cities
cities = ["Berlin", "Vienna", "Zurich"]
# initialize the object
iterator_obj = iter(cities)
print(next(iterator_obj))
print(next(iterator_obj))
print(next(iterator_obj))
输出 :
Berlin
Vienna
Zurich
注意:如果再调用一次“next(iterator_obj)”,它将返回“StopIteration”。
代码#3:检查对象是否可迭代
# Function to check object
# is iterable or not
def iterable(obj):
try:
iter(obj)
return True
except TypeError:
return False
# Driver Code
for element in [34, [4, 5], (4, 5),
{"a":4}, "dfsdf", 4.5]:
print(element, " is iterable : ", iterable(element))
输出 :
34 is iterable : False
[4, 5] is iterable : True
(4, 5) is iterable : True
{'a': 4} is iterable : True
dfsdf is iterable : True
4.5 is iterable : False