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

(0)
guozi的头像guozi
上一篇 2024年6月3日 下午3:57
下一篇 2024年6月3日 下午4:00

相关推荐

  • 大型网站开发

    大型网站开发,是指开发大型网站的过程。大型网站是当今互联网时代的主要存在,它们不仅在功能上提供了更多的服务,也在技术上有着更高的要求。而大型网站开发作为一门复杂的技术,需要经过概述…

    行业资讯 2024年3月19日
    0
  • 免费主机有什么好处(详解)

    云服务器行业正不断发展,而其中的免费主机更是备受关注。你是否听说过免费主机?它究竟有何好处呢?或许你已经被各种各样的广告诱惑,但是它们真的靠谱吗?今天我将为你详细解析免费主机的优缺…

    行业资讯 2024年3月27日
    0
  • win8provl版本是什么?(获取windowsxpvl密钥的方法)

    今天我们将探讨的是关于网络互联网服务器行业的一个热门话题——win8provl版本。你是否曾经听说过这个版本?它究竟有什么特点和作用?如果你正在寻找windowsxpvl密钥,那么…

    行业资讯 2024年4月21日
    0
  • 域名 ssl证书,域名开启ssl证书无法访问

    (3)正确配置服务器:在安装和配置过程中,应仔细检查相关设置是否正确。 (4)定期检查:定期检查SSL证书是否过期等问题,并及时解决。 申请并安装SSL证书是解决域名被屏蔽问题的有…

    行业资讯 2024年5月12日
    0

发表回复

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