首先,先看一个方法:dir(数据类型)
这个方法可以查看指定数据类型下所有的方法,比如dir([])
就表示返回列表的所有方法。
当用上述方法查看某个数据类型拥有的方法时,会发现有很多的带双下划线的方法,我们把这些方法叫作双下方法,一般这类方法不直接调用。
判断一个数据类型是否是可迭代的
1、首先,用dir(数据类型)
方法查看该类型有没有__iter__()
方法,如果有,就是可迭代的,如果没有,就不是,也就是说该方法类似于可迭代协议;而如果某个数据类型同时含有__next__()
和__iter__()
两个方法,则其就是迭代器。
2、除此之外,也可以用isinstance()
方法进行判断,具体如下:
- 判断一个数据类型是否为可迭代的
isintance(数据类型,Iterable)
- 判断一个数据是否是迭代器
isintance(数据类型,Iterator)
实例: 判断列表是否为可迭代的和迭代器(运行版本为python3.7)
from collections import Iterable
from collections import Iterator
print(isinstance([],Iterator))
print(isinstance([],Iterable))
迭代器的好处
1、从容器类型中一个一个的取值,会把所有的值都取到
2、节省内存空间
- 迭代器并不会在内存中再占用一大块内存,而是每次调用next方法,生成相应数据,并不会直接生成所有的数据,而是每次生成一个;
- 每次调用__next__()方法生成一个
迭代器的生成
迭代器的生成非常简单,对于有__iter__()
的方法,直接调用此方法就可以返回一个迭代器,然后就可以使用了。
基本语法: 可迭代变量名.__inter__()
实例:
lis = [1,2,3,4,54,5]
ret = lis.__iter__() #返回一个迭代器给ret
ret.__next__() #通过__next__()方法取值,第二次调用就取第二个值。