专栏名称: 极客挖掘机
高级软件工程师
目录
相关文章推荐
独角兽智库  ·  医药生物行业2025年2月投资策略:关注AI ... ·  3 天前  
独角兽智库  ·  大摩:“空头”也改口了,看多并上调MSCI中 ... ·  3 天前  
洪观新闻  ·  阿里巴巴美股涨近10% ·  3 天前  
洪观新闻  ·  阿里巴巴美股涨近10% ·  3 天前  
51好读  ›  专栏  ›  极客挖掘机

小白学 Python(20):迭代器基础

极客挖掘机  · 掘金  ·  · 2019-11-13 01:43

正文

阅读 50

小白学 Python(20):迭代器基础

人生苦短,我选Python

前文传送门

小白学 Python(1):开篇

小白学 Python(2):基础数据类型(上)

小白学 Python(3):基础数据类型(下)

小白学 Python(4):变量基础操作

小白学 Python(5):基础运算符(上)

小白学 Python(6):基础运算符(下)

小白学 Python(7):基础流程控制(上)

小白学 Python(8):基础流程控制(下)

小白学 Python(9):基础数据结构(列表)(上)

小白学 Python(10):基础数据结构(列表)(下)

小白学 Python(11):基础数据结构(元组)

小白学 Python(12):基础数据结构(字典)(上)

小白学 Python(13):基础数据结构(字典)(下)

小白学 Python(14):基础数据结构(集合)(上)

小白学 Python(15):基础数据结构(集合)(下)

小白学 Python(16):基础数据类型(函数)(上)

小白学 Python(17):基础数据类型(函数)(下)

小白学 Python(18):基础文件操作

小白学 Python(18):基础文件操作

小白学 Python(19):基础异常处理

迭代器

迭代器可以简单的理解为 for 循环, Python 除了 for 循环为我们准备了另一种访问集合元素的方式。

特点:

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

但是判断一个对象是否有迭代器,除了看它能不能使用 for 循环外, Python 也为我们提供了更加专业的方法—— isinstance()

我们可以使用 isinstance() 来判断当前的对象是否可以迭代。

在使用迭代器之前,需要先将迭代器引入,因为迭代器不是 Python 的内置方法。

from collections.abc import Iterable

print(isinstance('geekdigging', Iterable))
print(isinstance([], Iterable))
print(isinstance([], Iterable))
print(isinstance({x for x in range(5)}, Iterable))
print(isinstance(123, Iterable))复制代码

打印结果如下:

True
True
True
True
False复制代码

这里有一个小点注意一下,当我们在引入 Iterable 的时候,在之前的版本引入方式都是 from collections import Iterable ,但是在 Python3.7 的时候抛了一个异常出来,如下:

D:/Development/Projects/python-learning/base-iter/Demo.py:1: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working
  from collections import Iterable复制代码

含义是这种引入方式将在 Python3.8 中停止使用,现在 Python3.8 已经发布了,我们就按照提示中的方式来引入,使用 from collections.abc import Iterable

迭代器中,最重要的方法一定是 next() ,从名字上就能看出来,它的作用是下一个。

我们现在来尝试迭代一个列表:

list1 = [1, 2, 3, 4]
next(list1)复制代码

执行结果:

Traceback (most recent call last):
  File "D:/Development/Projects/python-learning/base-iter/Demo.py", line 12, in <module>
    next(list1)
TypeError: 'list' object is not an iterator复制代码

不是说好的列表是可以迭代的么,为什么又报错了。

这位同学,先消消气,看看报错信息说的是啥,这是在提示我们列表并不是一个迭代器。

所以,可迭代对象不一定是迭代器!

我们导入 Iterator 模块,先将列表转换成迭代器,再试试看。

list1 = iter(list1)
print(type(list1))复制代码

执行结果:

<class 'list_iterator'>复制代码

从类型上来看,现在已经是一个可以迭代的列表了,我们再试试 next() 方法。







请到「今天看啥」查看全文