python函数工具——“三大器”

函数工具——迭代器,生成器,装饰器。有人把它们称为DIG(Decorator,Iterator,Generator),它们都是真正掌握python的关键。
迭代器(Iterator)
迭代器是一个对象,它实现迭代协议,包含两个基本方法:’__iter__()’和’__next__()’。迭代去用于逐个访问集合(如列表、集合等)中的元素,而无需关心底层集合的视线。
迭代协议
  • __iter__():返回迭代器对象本身。这允许对象用于‘for’循环和其他迭代上下文。
  • __next__():返回下一个值。如果没有更多值可返回,则应引发’StopIteration‘异常。
迭代器的工作原理
当使用’for’循环遍历一个对象时,Python会自动调用对象的 __iter__() 方法获取迭代器对象,然后反复调用该迭代器的 __next__() 方法以获取下一个元素,直到引发 StopIteration 异常。
class MyIterator:    def __init__(self, data):        self.data = data        self.index = 0        def __iter__(self):        return self        def __next__(self):        if self.index < len(self.data):            result = self.data[self.index]            self.index += 1            return result        else:            raise StopIteration
my_list = [1, 2, 3, 4, 5]my_iter = MyIterator(my_list)
for item in my_iter:    print(item)
python提供两个内置函数来手工操作迭代器——iter()和next()
  • ‘iter(obj)’:从可迭代对象创建一个迭代器。
  • ‘next(iterator[, default])’:从迭代器获取下一个元素。如果迭代器已耗尽,且提供了 default,则返回 default 值;否则引发 StopIteration 异常。
my_list = [10, 20, 30, 40]my_iter = iter(my_list)
print(next(my_iter))  # 输出:10print(next(my_iter))  # 输出:20print(next(my_iter))  # 输出:30print(next(my_iter))  # 输出:40# print(next(my_iter))  # 再次调用会引发StopIteration异常

可迭代对象(Iterable)

任何实现了 __iter__() 方法的对象都是可迭代对象,它返回一个迭代器对象。所有内置的集合类型(如列表、元组、字典、集合等)都是可迭代对象。

生成器也是迭代器一种,实现更复杂的迭代器。生成器使用关键词’yield’生成值,并自动实现迭代协议。后面会更详细地讲解。


代码地带

用迭代器生成斐波那契数列

class Fibonacci:    def __init__(self, max):        self.max = max        self.a = 0        self.b = 1
    def __iter__(self):        return self
    def __next__(self):        if self.a > self.max:            raise StopIteration        a = self.a        self.a, self.b = self.b, self.a + self.b        return a
# 使用Fibonacci迭代器fibonacci = Fibonacci(10)for num in fibonacci:    print(num)

原创文章,作者:guozi,如若转载,请注明出处:https://www.sudun.com/ask/88142.html

Like (0)
guozi的头像guozi
Previous 2024年6月3日 下午3:57
Next 2024年6月3日 下午4:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注