📅  最后修改于: 2020-01-18 14:41:50             🧑  作者: Mango
可迭代是一个对象,特点之一可以遍历。传递给iter()
方法时,它将生成一个Iterator 。Iterator是一个对象,用于使用__next __()方法在可迭代对象上进行迭代。迭代器具有 __next__()
方法,该方法返回对象的下一项。
注意,每个迭代器也是可迭代的,但并非每个可迭代都是迭代器。例如,列表是可迭代的,但列表不是迭代器。可以使用函数从可迭代创建迭代器iter()
。为了使之成为可能,对象的类要么需要一个方法__iter__
,该方法返回一个迭代器,要么需要一个__getitem__
具有从index=0开始的顺序索引。
代码1:
for city in ["Berlin", "Logan", "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
Logan
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。
# 城市列表
cities = ["Berlin", "Vienna", "Zurich"]
# 初始化对象
iterator_obj = iter(cities)
print(next(iterator_obj))
print(next(iterator_obj))
print(next(iterator_obj))
输出:
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