软件测试资料领取:[内部资源] 想拿年薪40W+的软件测试人员,这份资料必须领取~
软件测试面试刷题工具领取:软件测试面试刷题【800道面试题+答案免费刷】
Python中迭代对象(Iterable)是非常核心的内容, 今天就和大家分享一下, 什么是迭代对象和迭代器。
简单来说迭代就等于循环, 那么迭代对象就是可以用for循环的对象.一句话记忆, 可以直接用于for循环的数据类型, 就是迭代对象.
常见的可迭代对象包括:
一、集合数据类型, 如元组(tuple), 列表(list), 字典(dict), 集合(set), 字符串(str)等
二、生成器generator, 包括生成器和带yield的generator function.
这些可以直接作用于 for 循环的对象统称为 可迭代对象: Iterable
可迭代对象的实质: 在语法层面,如果一个对象实现了__iter__函数,那么这个对象就是可迭代对象.
迭代对象(Iterable)并不是指某种特定的数据类型或数据结构,它是指存储元素的容器对象,且容器中的元素允许使用__iter__( )函数或__getitem__( )函数进行访问
__iter__函数的作用是让对象可以用for … in循环遍历
getitem( )方法是让对象可以通过“实例名[index]”的方式访问实例中的元素.
如何判断数据是否为可迭代对象呢?
判断时可以使用 isinstance(数据类型, Iterable) 判断一个对象是否是Iterable对象
from collections import Iterable
print(isinstance('qftest', Iterable)) # True
print(isinstance((),Iterable)) # True
print(isinstance([],Iterable)) # True
print(isinstance({},Iterable)) # True
print(isinstance((x for x in range(6)), Iterable)) # True
print(isinstance(10086, Iterable)) # False
通过上面例子可以看出,Python中的内置类型元组(tuple), 列表(list),字典(dict),字符串(str)等对象都是可迭代的.
接下来, 我用自定义一个类, 看一下类是否为可迭代对象.
class ListDemo:
def __init__(self):
self.listnum = []
def add(self, n):
self.listnum.append(n)
list = ListDemo()
list.add(10)
list.add(20)
print(isinstance(list, Iterable)) # False
我们自定义了一个类ListDemo,由于这个类没有实现iter方法,所以这个类的实例不是可迭代对象。
那么什么是迭代器呢?
可以被next()函数调用并不断返回下一个值的对象称为迭代器: Iterator.
可以使用 isinstance() 判断一个对象是否是Iterator对象:
from collections import Iterator
print(isinstance('qftest', Iterator)) # False
print(isinstance((),Iterator)) # False
print(isinstance([],Iterator)) # False
print(isinstance({},Iterator)) # False
print(isinstance((x for x in range(6)), Iterator)) # True
print(isinstance(10086, Iterator)) # False
生成器都是Iterator对象, 但元组(tuple), 列表(list), 字典(dict), 字符串(str)虽然是Iterable, 但却不是Iterator.
如何将元组(tuple), 列表(list), 字典(dict), 字符串(str)等Iterable转为Iterator呢?
使用用iter() 函数即可。
print(isinstance(iter([]),Iterator)) # True
print(isinstance(iter({}),Iterator)) # True
print(isinstance(iter(()),Iterator)) # True
print(isinstance(iter('qftest'),Iterator)) # True
大家可能会有疑问, 为什么元组(tuple), 列表(list), 字典(dict), 字符串(str)等数据类型不是 迭代器呢(Iterator), 是迭代对象又不是迭代器,云里雾里的, 我们接着往后看.
python中的Iterator对象表示的是一个数据流, Iterator对象可以被next()函数调用并不断返回下一个值直到没有数据返回最后抛出StopIteration错误提示。
可以将该数据流当做一个序列, 但我们不知道该序列的长度, 只能不断通过next() 函数实现按需计算下一个数据.
所以Iterator的计算是惰性的. 只有在需要返回下一个数据时, 它才会做计算.
Iterator表示一个无限数量的元素容器.
凡是可作用于for循环的对象 都是Iterable对象
凡是可作用域next() 函数的对象都是 Iterator 类型, 它们表示一个惰性计算的序列.
集合数据类型 list, tuple, dict, str等是Iterable但不是Iterator, 不过可以通过iter() 函数获得一个Iterator对象.
例如: python中的for循环底层就是通过不断的进行调用next() 函数实现的.
for i in [10, 20, 30, 40,50]:
print(i)
完全等价于:
先将列表数据 转换为Iterator迭代器
i = iter([10,20,30,40,50])
再循环
while True:
try:
# 获取下一个值
x = next(i)
except StopIteration:
# 没有数据 捕获StopIteration异常
break
以上就是迭代对象与迭代器的相关内容.
既然看到这里,在收藏的同时,也请不吝啬的点个赞呗!期待 ~
![]()
最后感谢每一个认真阅读我文章的人!!!作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些软件测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

测试文档模板

测试简历模板

视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

被折叠的 条评论
为什么被折叠?



