摄影网站设计报告,做ppt用的音效网站,做网站 江门,类似in a wordpress章节目录#xff1a; 一、迭代器1.1 相关概述1.2 基本使用1.3 自定义迭代器 二、生成器2.1 相关概述2.2 基本使用2.3 三种应用场景 三、yield 和 class 定义的迭代器对比四、结束语 一、迭代器
1.1 相关概述
迭代是 Python 最强大的功能之一#xff0c;是访问集合元素的一种… 章节目录 一、迭代器1.1 相关概述1.2 基本使用1.3 自定义迭代器 二、生成器2.1 相关概述2.2 基本使用2.3 三种应用场景 三、yield 和 class 定义的迭代器对比四、结束语 一、迭代器
1.1 相关概述
迭代是 Python 最强大的功能之一是访问集合元素的一种方式。迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问直到所有的元素被访问完结束。迭代器只能往前不会后退。迭代器有两个基本的方法iter() 和 next()。
1.2 基本使用
字符串列表或元组对象都可用于创建迭代器
# iter():创建迭代器。
it iter([1, 2, 3, 4])# next():访问迭代器的下一元素。
print(next(it))
# 1
print(next(it))
# 2# 也可以 for 循环遍历下一元素。
for e in it:print(fe{e})# e3# e4
另一种遍历方式
import sys# iter():创建迭代器。
it iter([1, 2, 3, 4])while True:try:print(next(it))# 1# 2# 3# 4except StopIteration:sys.exit()
1.3 自定义迭代器 把一个类作为一个迭代器使用需要在类中实现两个方法 __iter__() 与 __next__() 。 __iter__() 方法返回一个特殊的迭代器对象 这个迭代器对象实现了 __next__() 方法并通过 StopIteration 异常标识迭代的完成。 __next__() 方法会返回下一个迭代器对象。 代码示例
class Sample:def __iter__(self):self.n 0return selfdef __next__(self):# 初始值。x self.nself.n 1return xsample Sample()
it iter(sample)
# 迭代两次。
print(next(it))
# 0
print(next(it))
# 1
通过 StopIteration 异常用于标识迭代的完成防止出现无限循环的情况
class Sample:def __iter__(self):self.n 0return selfdef __next__(self):# 限制迭代次数。if self.n 3:x self.nself.n 1return xelse:raise StopIterationsample Sample()
it iter(sample)for e in it:print(e)# 0# 1# 2
二、生成器
2.1 相关概述
在 Python 中使用了 yield 的函数被称为生成器 generator 。yield 是一个关键字用于定义生成器函数生成器函数是一种特殊的函数可以在迭代过程中逐步产生值而不是一次性返回所有结果。跟普通函数不同的是生成器是一个返回迭代器的函数只能用于迭代操作更简单点理解生成器就是一个迭代器。当在生成器函数中使用 yield 语句时函数的执行将会暂停并将 yield 后面的表达式作为当前迭代的值返回。然后每次调用生成器的 next() 方法或使用 for 循环进行迭代时函数会从上次暂停的地方继续执行直到再次遇到 yield 语句。这样生成器函数可以逐步产生值而不需要一次性计算并返回所有结果。调用一个生成器函数返回的是一个迭代器对象。
2.2 基本使用
代码示例
def countdown(n):while n 0:# 关键字。yield nn - 1# 创建生成器对象。
generator countdown(5)# 通过迭代生成器获取值。
print(fby generator {next(generator)})
print(fby generator {next(generator)})
# by generator 5
# by generator 4# 使用 for 循环迭代生成器。
for value in generator:print(fby for {value})# by for 3# by for 2# by for 1
示例说明 countdown() 函数是一个生成器函数yield 语句逐步产生从 n 到 1 的倒数数字。在每次调用 yield 语句时函数会返回当前的倒数值并在下一次调用时从上次暂停的地方继续执行。生成器函数的优势是它们可以按需生成值避免一次性生成大量数据并占用大量内存。生成器还可以与其他迭代工具 如 for 循环 无缝配合使用提供简洁和高效的迭代方式。
2.3 三种应用场景
定义一个容器类的可迭代对象为该对象实现 __iter__() 接口
class MyData:propertydef size(self):可以得到数据的大小。:return:return self.sizedef get_value(self, index):假设可以通过索引按顺序得到数据。:param index::return:return indexdef __iter__(self):可迭代对象。:return:# index 为局部变量。index -1# 设定完成的条件。while index 2:index 1yield self.get_value(index)if __name__ __main__:# 这里的 mydata 是可迭代对象而非迭代器。mydata MyData()
定义一个处理其它可迭代对象的迭代器
COLOR_LIST [red, blue, green]def my_color_generate(colors):for color in colors:# 如果是红蓝绿就跳过。if color in COLOR_LIST:continue# 粉色则生成两次。elif pink color:yield color * 2# 其余颜色生成一次。else:yield colorcolors [blue, yellow, pink]
for c in my_color_generate(colors):print(c)# yellow# pinkpink
定义一个不依赖数据存储的数据生成器参考本章节 - 2.2 基本使用的代码示例
三、yield 和 class 定义的迭代器对比
动作class 实现的迭代器yield 生成器定义迭代器class Iterator:def __init__(self, *args):def iter_fun(*args):构建迭代器Iterator(args)iter_fun(args)next(iterator)def __next__(self): return valueyield valueStopIterationraise StopIterationreturniter(iterator)def __iter__(self): return self自动实现
四、结束语 “-------怕什么真理无穷进一寸有一寸的欢喜。” 微信公众号搜索饺子泡牛奶。