一、入门 在Python中可迭代对象主要是指可循环遍历的对象,例如str, list, tuple, dict, set等。这些对象在典型高级语言中可以使用类似for等循环语句进行遍历,但是也有一定局限性。而且,
一、入门
在Python中可迭代对象主要是指可循环遍历的对象,例如str, list, tuple, dict, set等。这些对象在典型高级语言中可以使用类似for等循环语句进行遍历,但是也有一定局限性。而且,为了更为通用和高效率设计,引入了iter和next等专门用于实现可遍历对象的内置函数来实现遍历任务。
1、在Python2中情形:
2、在Python3中情形:
只允许使用一种情形:
二、可迭代对象(iterable)深入
定义了__iter__()方法或者__getitem__()方法的对象,就是可迭代的对象,比如list, tuple, dict, set,file(在每一行上迭代)等;
可以利用collections 中 Iterable 判断一个对象是否是可迭代的,也可以通过dir(my_list)来查看对象是否生成了__iter__()方法
from collections import Iterablemy_list = [1, 2, 3, 4]
my_tuple = (1, 2, 3, 4)
my_dict = {'a': 1, 'b':2}
my_set = {1, 2, 3, 4}
print(isinstance(my_list, Iterable)) # 返回True
print(isinstance(my_tuple, Iterable))# 返回True
print(isinstance(my_dict, Iterable)) # 返回True
print(isinstance(my_set, Iterable)) # 返回True
print("abc123", Iterable) # 返回True
isinstance(open('arr.txt'), Iterable) # 返回True,前提是当前文件存在,因为执行此行时系统会先查找文件,若不存在先抛异常
注:判断一个对象是不是可迭代对象,利用isinstance(obj, Iterable)并不总是可靠的,该方法只检测对象是否实现了__iter__(), 对于那些仅仅实现了__getitem__()方法的对象,该方法就会失效。
因此,更为可靠的方法是:使用dir()方法并通过肉眼查看有没有实现__getitem__或者 __iter__(),或者调用iter()方法。当然,使用iter()方法,会有一些限制。请参考下面两个简单例子:
class A:def __iter__(self):
pass
class B:
def __getitem__(self):
pass
a = A()
b = B()
print(isinstance(a, Iterable)) # True
print(isinstance(b, Iterable)) # False, B 实现了__getitem__方法,但isinstance(o, Iterable)并没有检测出来