📜  Python|可迭代和迭代器之间的区别

📅  最后修改于: 2022-05-13 01:54:39.420000             🧑  作者: Mango

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