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

可以将iterable宽松地定义为一个对象,该对象在传递给内置方法时将生成迭代器iter()。有两个条件,一个对象是可迭代的,该类的对象需要定义两个实例方法:__ len__和__getitem__。传递给method时满足这些条件的对象iter()将生成迭代器。

让我们了解以下示例,了解可迭代的-

string = "Nhooo"
for char in string:
print (char)

输出结果

T
u
t
o
r
i
a
l
s
p
o
i
n
t

在代码上方使用__getitem __(index)方法,该方法将在index指定的位置返回元素。

因此,我们上面的代码-

  • 从索引0开始

  • 呼叫字串。__getitem __(索引)

  • 引发IndexError?停止

  • 循环的运行主体

  • 增量索引,返回到步骤2。

迭代器

迭代器被定义为通过内部状态变量对交互进行计数的对象。在这种情况下,当迭代越过最后一项时,该变量不会设置为零,而是StopIteration()会引发该值以指示迭代结束。这也意味着被迭代的项目将仅被迭代一次,如下面的示例所示:

my_list = ['itemOne', 'nhooos']
iterators_of_some_list = iter(my_list)
for i in iterators_of_some_list:
   print(i)
for j in iterators_of_some_list: # doesn't work
   print(j)
#However
for k in my_list:
   print(k)
for l in my_list: # it worked
   print(l)

输出结果

itemOne
nhooos
itemOne
nhooos
itemOne
nhooos

上面的代码成立,因为iter()迭代器上的方法返回了自己(即记住当前状态)。因此,在上面我们有一个类似于“ for”的循环实现以终止它。