前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【测试开发】python系列教程:迭代器与生成器

【测试开发】python系列教程:迭代器与生成器

作者头像
雷子
发布2022-12-29 19:48:57
2370
发布2022-12-29 19:48:57
举报

上一篇

【测试开发】python系列教程:循环语句

本次分享迭代器和生成器


正文

迭代是Python最强大的功能之一,是访问集合元素的一种方式。迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。迭代器有两个基本的方法:iter() 和 next()。

字符串,列表或元组对象都可用于创建迭代器:

代码语言:javascript
复制
列表
>>> li=[1,2,3]
>>> it=iter(li)#创建迭代器
>>> print(next(it))#获取迭代器下一个
1
>>> print(next(it))#获取下一个
2
>>> print(next(it))
3
>>> print(next(it))#超过时候会报出来异常StopIteration
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
字符串
>>> strone='1ABB'
>>> one=iter(strone)
>>> print(next(one))
1
>>> print(next(one))
A

元组
>>> name={'a','b'}
>>> item=iter(name)
>>> print(next(item))
a
>>> print(next(item))
b
>>> print(next(item))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration

迭代器除了这样,还可以for循环

代码语言:javascript
复制
>>> name={'a','b'}
>>> item=iter(name)
>>> for i in item:
...     print(i)
...
a
b

当然也可以用next

代码语言:javascript
复制
>>> list=[1,2,3,4]
>>> it = iter(list)
>>> while True:
...     print(next(it))
...
1
2
3
4
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
StopIteration

这里越界后会报错,所以可以用try处理下。

代码语言:javascript
复制
>>> import sys         # 引入 sys 模块
>>> list=[1,2,3,4]
>>> it = iter(list)    # 创建迭代器对象
>>> while True:
...     try:
...         print (next(it))
...     except StopIteration:
...         sys.exit()
...
1
2
3
4

这样就处理了异常。

创建一个迭代器

把一个类作为一个迭代器使用需要在类中实现两个方法 __iter__() 与 __next__() 。

如果你已经了解的面向对象编程,就知道类都有一个构造函数,Python 的构造函数为 __init__(), 它会在对象初始化的时候执行

代码语言:javascript
复制

class Myiter():
    def __iter__(self):
        self.a=1
        return self
    def __next__(self):
        x=self.a
        self.a+=1
        return x
my=Myiter()
myite=iter(my)
print(next(myite))
print(next(myite))
print(next(myite))

结果输出

代码语言:javascript
复制
1
2
3

创建一个迭代器,然后迭代增加。类相关的后续分享。

生成器

在 Python 中,使用了 yield 的函数被称为生成器(generator)演示下:

代码语言:javascript
复制
def odd():
    print('step 1')
    yield 1
    print('step 2')
    yield(3)
    print('step 3')
    yield(5)
o=odd()
next(o)
next(o)

结果:

代码语言:javascript
复制
step 1
step 2

在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。调用一个生成器函数,返回的是一个迭代器对象。

在一次执行,我们可以通过迭代器,产生一个对象处理完,获取迭代器下一个对象。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-11-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 雷子说测试开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 生成器
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档