码迷,mamicode.com
首页 > 其他好文 > 详细

学以致用三十七-----弄懂迭代

时间:2018-11-29 11:17:27      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:end   方法   reverse   ext   ace   remove   调整   tor   数据   

近半个多月以来,一直在重庆出差,山城真是一座很有特色的城市。轻轨,火锅是我印象最深的,然而却把功课给落下了不少。学习效率也不如从前,需尽快调整过来,差的状态不能迭代下去。

那什么是迭代,这次就要把迭代给理理清楚来。

可直接作用于for循环的数据类型有以下几种:

一类是集合数据类型,如 list,tuple,dict,set,str等

一类是generator,包扩生成器和带yield的generator function

可直接作用于for循环的对象统统称为可迭代对象,也可称为可循环对象..Iterable

判断一个对象是否可迭代,可使用如下方法

>>> from collections import Iterable
>>> isinstance([],Iterable)
True
>>> isinstance(100,Iterable)
False
>>> isinstance({},Iterable)
True
>>> isinstance((),Iterable)
True
>>> isinstance(abc,Iterable)
True

而可以 被next()函数调用并不断返回下一个值的对象称为迭代器 Iterator

注意: 可迭代对象和迭代器的区别

 譬如:

>>> a = [1,2,3]
>>> dir(a)
[__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]
>>>

通过dir可以查看a的属性,发现没有next方法,因此a不是迭代器

>>> from collections  import Iterator
>>> isinstance((x for x in range(5)),Iterator)
True
>>> isinstance([],Iterator)
False
>>> isinstance({},Iterator)
False

可以看出这里 列表和字典都不是迭代器,

而生成器是可迭代对象,也是迭代器

>>> from collections import Iterable
>>> isinstance((x for x in range(5)),Iterable)
True

迭代对象转换成迭代器,使用iter()函数

>>> iter(a)
<list_iterator object at 0x000002BF207CD9B0>
>>> b = iter(a)
>>> b.__next__()
1
>>> b.__next__()
2
>>> b.__next__()
3
>>> b.__next__()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
>>>

python中的Iterator对象表示的是一个数据流,可以被next()函数调用并不断返回下一个数据,直到没有数据抛出StopIteration异常。Iterator的计算是惰性的,只有在需要返回下一个数据时才会计算。

 

学以致用三十七-----弄懂迭代

标签:end   方法   reverse   ext   ace   remove   调整   tor   数据   

原文地址:https://www.cnblogs.com/liongong/p/10030040.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!