首页 > 技术文章 > Python:迭代器

hxyzy 2020-04-20 20:27 原文

在讲迭代器之前,我们需要先了解一下什么是迭代和可迭代对象

1. 什么是迭代?

    迭代是访问集合元素的一种方式

nums = [11, 22, 33]

# 可以通过for循环将nums列表中的每个数据依次获取
for num in nums:
    print(num)


name = "teacher"

for temp in name:
    print(temp)

我们已经知道可以对listtuplestr等类型的数据使用for...in...的循环语法从其中依次拿到数据进行使用,我们把这样的过程称为遍历,也叫迭代

 

2. 什么是可迭代对象?

    可以使用for.......in........去循环遍历,就是可迭代对象

    下面的是可以迭代的数据类型

  • 列表
  • 元组
  • 字典
  • 字符串

    而下面的则不是可以迭代的数据类型

  • 整型
  • 浮点型

                    

In [53]: isinstance('abc', Iterable)
Out[53]: True

In [54]: isinstance(mylist, Iterable)
Out[54]: False

可以使用isinstance来判断元素是否是一个可迭代的对象

什么是迭代器?

迭代器是一个可以记住遍历的位置的对象。迭代器对象从第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退

在一个程序中我们就可以使用iter(xx)方法来获取可迭代对象得迭代器,通过next(xx)方法获取迭代器的数据

from collections.abc import Iterator


nums = [11, 22, 33, 44]
nums_iter = iter(nums)

print("nums", isinstance(nums, Iterator))
print("nums_iter", isinstance(nums_iter, Iterator))


num1 = next(nums_iter)
print(num1)

num2 = next(nums_iter)
print(num2)

num3 = next(nums_iter)
print(num3)

num4 = next(nums_iter)
print(num4)

要注意的是使用nex()方法 不可以超过元素个数,如果在上述代码中再使用next()获取一次数据就会报错,因为数据只有四个已经获取完了

还有要注意的一点是:可迭代对象不一定是迭代器,但是迭代器一定是可迭代对象

推荐阅读