本文共 1277 字,大约阅读时间需要 4 分钟。
迭代器与生成器:Python中的高效数据处理
迭代器是访问集合元素的一种方式。在Python中,迭代器通过定义__iter__()方法的对象来实现,可以提供一种统一的数据访问接口。迭代器只能向前迭代,不支持倒退,这在大多数应用中并没有太大影响。
对于原生支持随机访问的数据结构(如list、tuple),迭代器相比传统的索引访问并没有明显优势。然而,对于无法随机访问的数据结构(如set),迭代器是唯一的访问元素的方式。迭代器的另一个显著优势是它不需要事先加载所有元素。迭代器在访问元素时会动态计算,前后两边的元素可能不存在或被销毁,这使得它特别适合处理大型或无限的数据集合。
迭代器的核心方法包括next(),用于获取下一个元素,以及__iter__(),用于返回迭代器对象本身。Python内置的iter()函数可以获取迭代器对象,例如:
lst = range(5)it = iter(lst)for val in it: print(val)
迭代器在处理越界时会抛出StopIteration异常。Python的for循环语句会自动处理这一异常,确保迭代过程的安全性。
生成器是带有yield语句的函数。在Python中,生成器函数既可以保持迭代器的简洁性,又能在迭代过程中保存状态。例如,使用生成器可以轻松生成斐波那契数列:
def fab(max): n, a, b = 0, 0, 1 while n < max: yield b a, b = b, a + b n += 1
调用生成器时,可以直接用for循环遍历生成的值:
for num in fab(5): print(num)
生成器的优势在于它能够在迭代过程中动态生成数据,而无需占用内存。这种设计既保留了传统迭代器的高效性,又避免了内存膨胀的问题。
Python的字符串格式化功能非常强大,可以满足多种格式化需求。格式化字符串可以包含多个格式标记,例如:
tpl = "i am %s age %d" % ("alex", 18)tpl = "i am %(name)s age %(age)d" % {"name": "alex", "age": 18}tpl = "percent %.2f" % 99.97623 格式化标记的详细说明如下:
s用于字符串,d用于整数等。>右对齐)。#用于显示二进制、八进制、十六进制的前缀,%%用于显示百分号。常用格式化示例:
tpl = "numbers: {:b},{:o},{:d},{:x},{:X}, {:%}".format(15, 15, 15, 15, 15, 15.87623, 2) 这些功能使得字符串格式化变得灵活且强大,便于构建美观且结构化的输出内容。
转载地址:http://eshfk.baihongyu.com/