可迭代是一个对象,可以迭代。它在传递给iter()方法时生成一个迭代器。迭代器是一个对象,用于使用__next__()方法循环访问可迭代对象。迭代器具有__next__()方法,该方法返回对象的下一项。
注意: 每个迭代器也是可迭代的,但并非每个可迭代器都是 Python 中的迭代器。
例如,列表是可迭代的,但列表不是迭代器。可以使用函数 iter() 从可迭代对象创建迭代器。为了实现这一点,对象的类需要一个方法__iter__,它返回一个迭代器,或者一个__getitem__方法,其顺序索引以 0 开头。
示例 1:
我们知道 str 是可迭代的,但它不是迭代器。如果我们在for循环中运行它来打印字符串,那么这是可能的,因为当for循环执行时,它会转换为迭代器来执行代码。
BB
代码
next("GFG")
**输出:** ```python Traceback (most recent call last): File "/home/1c9622166e9c268c0d67cd9ba2177142.py", line 2, in <module> next("GFG") TypeError: 'str' object is not an iterator
这里iter( )正在将字符串(可迭代)的s转换为迭代器,并首次打印G,我们可以多次调用以迭代字符串。
当执行 for 循环时,for 语句在对象上调用 iter(),它应该循环访问该对象。
如果此调用成功,则迭代器调用将返回一个迭代器对象,该对象定义方法 next(),该方法一次访问一个对象的元素。
# 代码 s="GFG" s=iter(s) print(s) print(next(s)) print(next(s)) print(next(s))
输出:
<str_iterator object at 0x7f822a9c3210> G F G
如果没有其他可用的元素,next() 方法将引发停止站点异常。
for 循环将在捕获停止站点异常后立即终止。
让我们使用 next() 内置函数调用__next__() 方法。
示例 2:
如果对象“obj”是可迭代的,则函数“可迭代”将返回 True,否则返回 False。
# 城市列表 cities = ["Berlin", "Vienna", "Zurich"] # 初始化对象 iterator_obj = iter(cities) print(next(iterator_obj)) print(next(iterator_obj)) print(next(iterator_obj))
输出:
Berlin Vienna Zurich
注意: 如果再次调用“next(iterator_obj)”,它将返回“停止站点”。
示例 3:
检查对象是否可迭代。
# 检查对象是否可迭代的函数 def it(ob): try: iter(ob) return True except TypeError: return False # 驱动程序代码 for i in [34, [4, 5], (4, 5), {"a":4}, "dfsdf", 4.5]: print(i,"is iterable :",it(i))
输出:
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