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's avatarguozi
上一篇 2024年6月3日 下午3:57
下一篇 2024年6月3日 下午4:00

相关推荐

  • MySQL CURTIME和CURRENT有什么区别?

    你是否经常在使用MySQL时遇到CURTIME和CURRENT这两个函数,却无法分辨它们的区别?是不是总觉得它们的定义、用途、语法和返回结果都差不多,但又有些微妙的差异?那么,今天…

    行业资讯 2024年3月28日
    0
  • 数据写入FTP服务器csv文件

    一 前言 CPI是SAP公司提供的云服务,功能类似于PI/PO,用于集成多个系统之间的调用 本文主要介绍一个通用接口设计 该接口用于实现ECC/S4把数据发到指定FTP服务器的目录…

    2024年6月4日
    0
  • ip被墙查询打九价前注意事项

    您在上网时是否遇到过突然无法访问某个网站的情况?或者您在注册网站时被告知您的IP被屏蔽,但您不知道如何解决?请担心。今天我们就来介绍一下IP被封的相关知识,让大家轻松了解什么是IP…

    行业资讯 2024年5月14日
    0
  • 服务器遭攻击,服务器被攻击后会怎么样

    近年来,随着互联网的快速发展,服务器攻击事件层出不穷。当服务器受到攻击时,网站经常崩溃,给用户带来极大的不便。那么什么是服务器攻击?为什么网站会崩溃?更重要的是,如何防止服务器受到…

    行业资讯 2024年5月12日
    0

发表回复

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