Python三大器之迭代器

什么是迭代器?为什么会有迭代器?这将是理解迭代器很重要的两个问题。

示例:

l = [1,2,3,4],取列表中的值,我们可以根据索引去取值,也可以通过for循环的形式拿到我们需要的值,但是有个问题1:为什么for循环就可以取到值?

在回答问题1时,我们首先回想下:那些可以进行for循环?,列表(list),元组(tuple),字典(dic), 集合(set),枚举(enumerate),range,字符串等等.

我们通过dir函数来查看,列表,字符串拥有哪些方法:

列表篇----print(dir(list))

得到结果:以下就是列表所拥有的所有方法

['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

字符串篇---print(dir(str))

得到结果:以下就是字符串所拥有的所有方法

['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']

通过比较我们发现,列表和字符串共同拥有一个双下iter方法,即红色__iter__方法,你可以去用dir函数,去查看,字典,文件句柄,等等,结果是一样的。因为他们都拥有这个__iter__方法,实际上这个方法代表可迭代。

结论:只要可以被for循环的都是可迭代的,那么你要想是可迭代的,内部必须有一个__iter__方法。即:只要含有__iter__方法的都是可迭代的------------可迭代协议

for循环的本质:寻找内部是否包含__iter__方法,如果有那么执行for循环,否则报错,例如对int型执行for循环,TypeError: 'int' object is not iterable(不可迭代)只有是可迭代对象的时候,才能用for循环,当我们遇到一个新的变量,不确定能不能for循环的时候回,就判断是否为可迭代。

#总结

1:可以被for循环的都是可迭代的

2:可迭代的内部一定包含__inter__方法

3:可迭代的通过调用__iter___()方法可以得到迭代器

4:只要是迭代器必定是可迭代。

5:迭代器中的__next__()方法可以一个一个的获取值

6:for循环其实就是在使用迭代器

7:可迭代对象

     当你感觉应该给你很多个值,但是他没有给你,而是给你一个看起来什么都没做的事情的时候,猜测它可能是个可迭代对象或者是迭代器。

#########迭代器的好处(为什么有这个东西)?***************

1:可以节省内存空间

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值