【测试开发】python系列教程:迭代器与生成器
2023-06-13 09:16:24 时间
上一篇
本次分享迭代器和生成器
正文
迭代是Python最强大的功能之一,是访问集合元素的一种方式。迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。迭代器有两个基本的方法:iter() 和 next()。
字符串,列表或元组对象都可用于创建迭代器:
列表
>>> 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循环
>>> name={'a','b'}
>>> item=iter(name)
>>> for i in item:
... print(i)
...
a
b
当然也可以用next
>>> 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处理下。
>>> 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__(), 它会在对象初始化的时候执行
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))
结果输出
1
2
3
创建一个迭代器,然后迭代增加。类相关的后续分享。
生成器
在 Python 中,使用了 yield 的函数被称为生成器(generator)演示下:
def odd():
print('step 1')
yield 1
print('step 2')
yield(3)
print('step 3')
yield(5)
o=odd()
next(o)
next(o)
结果:
step 1
step 2
在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。调用一个生成器函数,返回的是一个迭代器对象。
在一次执行,我们可以通过迭代器,产生一个对象处理完,获取迭代器下一个对象。
相关文章
- 【python教程入门学习】PyCharm下载和安装教程(包含配置Python解释器)
- pycharm自带python环境吗_Python IDE环境之 新版Pycharm安装详细教程[通俗易懂]
- python win32api messagebox_如何在Python中使用Win32 API?
- python 生成数组_Python创建数组「建议收藏」
- Python入门系列(五)一篇搞懂python语句
- python中dtype什么意思_NumPy Python中的数据类型对象(dtype)
- python 多线程测试_【Python】多线程网站死链检测工具
- 迭代器Python_python进阶路线
- 【说站】python中lstrip()截掉字符
- 【测试开发】python系列教程:输入和输出
- 【测试开发】python系列教程: 标准数据类型(二)字符串
- h5 Python_python做h5网站
- python如何生成随机数_Python生成50个随机数
- 廖雪峰的 Python 教程_python基础教程廖雪pdf
- 【测试开发】python系列教程:函数(二)
- 【测试开发】python系列教程: 标准数据类型(三)List(列表)
- 【测试开发】python系列教程: 标准数据类型(五)Set(集合)
- 【测试开发】python系列教程:Python注释和解释器
- 【测试开发】python系列教程:Python 运算符
- opencv(4.5.3)-python(二十九)--Hough线变换
- python-Python与MySQL数据库-处理MySQL查询结果
- Python 定时运行脚本详解编程语言
- python分割文件详解编程语言
- MySQL与Python搭配,实现数据库操作。(mysql-python)
- python实现批量转换文件编码(批转换编码示例)