一、迭代器(Iterators)
迭代器是Python中用于遍历数据集合的一种机制。它是一个实现了迭代协议的对象,可以通过iter()函数来获得迭代器。迭代器需要实现两个方法:__iter__()和__next__()。其中,__iter__()返回迭代器自身,而__next__()返回序列中的下一个元素。当没有元素可以返回时,__next__()应该引发StopIteration异常,表示迭代结束。当我们处理数据集合时,往往需要逐个访问其中的元素,这时就需要用到迭代器(Iterators)。
__iter__() 方法:这个方法应该返回迭代器对象自身。它表示对象可以被迭代,可以用在 for 循环中。一般来说,__iter__() 方法只需返回 self 即可。
__next__() 方法:这个方法返回序列中的下一个元素。如果没有元素可供返回,它应该引发 StopIteration 异常来表示迭代结束。每次调用 __next__() 方法,迭代器会返回序列中的下一个元素,直到所有元素都被访问完毕。
下面是一个简单的示例来展示如何创建一个迭代器:
class MyIterator:
def __init__(self, start, end):
self.current = start
self.end = end
def __iter__(self):
return self
def __next__(self):
if self.current < self.end:
self.current += 1
return self.current - 1
else:
raise StopIteration
my_iter = MyIterator(0, 10)
for num in my_iter:
print(num)
二、生成器(Generators)
生成器(Generator)是 Python 中一种特殊的迭代器,它可以在函数中使用 yield 关键字来返回一个值,而不是使用 return。当函数被再次调用时,它会从上次 yield 的位置继续执行,而不是从头开始。这使得生成器在处理大量数据或需要按需生成数据的场景中非常有用。
生成器的创建有两种方式:一种是使用生成器表达式,另一种是使用带有 yield 关键字的函数。
使用yield关键字:
def my_generator(start, end):
current = start
while current < end:
yield current
current += 1
# 使用生成器遍历序列
gen = my_generator(0, 9)
for num in gen:
print(num)
生成器表达式:
# 使用生成器表达式生成一个包含平方数的生成器
squares_gen = (x ** 2 for x in range(10))
# 遍历生成器并打印每个平方数
for square in squares_gen:
print(square)
生成器表达式是一种紧凑的语法形式,允许你在一行代码中创建生成器。与列表推导类似,生成器表达式也是一种用于创建序列的方式,但不会立即生成整个序列,而是按需生成元素。这在处理大数据集时非常有用,可以节省内存。生成器表达式的语法和列表推导式很相似,只需将方括号 [] 替换为圆括号 (),并使用 yield 关键字或普通的表达式来生成元素。
三、生成器的优点
生成器按需生成数据,而不是一次性生成整个序列。这意味着只有在需要时才会在内存中存储一个元素,从而避免了大量数据占用内存的问题。这对于处理大型数据集尤其有用,可以避免内存溢出。而且生成器采用惰性计算策略,即只在需要时计算值。这在处理复杂计算或涉及耗时操作的情况下很有用,可以避免不必要的计算。
四、生成器常见的一些使用场景
1、文件的逐行读取
2、大数据量的处理
3、数据清洗
今天的文章,对Python中的迭代器和生成器的使用就简单的介绍到这里了,更多精彩内容欢迎持续关注公众号进行查看喔~ 接下来要准备进入到pytest框架的学习啦,即将开启自动化测试的学习,敬请期待后面的文章喔。
End
如果觉得文章对你有帮助的话,欢迎点赞转发~
如果还没有进粉丝交流群的小伙伴,赶快添加好友(xiaobotester)邀请你们进群喔。
👇👇👇
关注公众号,测试干货及时送达
为感谢所有粉丝的关注和长期以来的支持,特在公众号后台为大家准备了一些资料,可在后台回复【百宝箱/关键字】获取相关链接,资料会持续更新,有需要的可以先私聊作者补充文档。
往期精彩回顾
如何打造一篇优秀的简历
混迹职场多年的你,面试真的准备好了吗?
你还在抱怨职场的不公吗?
职场篇-初入职场如何选择行业和公司
面试逻辑题分享--字母数字映射关系推算题
非技术性的面试中的技巧性回答集锦(建议收藏)
你的求职简历中招了吗?
测试编程笔试题No.1-输入表格列的英文名称,返回其对应的数字序号
软件测试面试题分享-No.1
软件测试面试题分享-No.2
软件测试面试题分享-No.3
软件测试面试题分享-No.4
软件测试面试题分享-No.5
软件测试面试题分享-No.6(某某某公司面试题)
软件测试面试题分享-No.7(接口自动化面试题)
xxx公司测试岗位企业面试题