Ciallo~(∠・ω・ )⌒☆第二十三篇 python 可迭代,迭代器,生成器,装饰器

news2024/11/25 4:43:49

Python中的可迭代对象(iterable)是指可以被迭代的对象,例如列表、元组、字符串等。可迭代对象可以通过循环来访问其元素。

迭代器(iterator)是一种能够逐个访问元素的对象,它实现了__iter__()__next__()方法。__iter__()方法返回迭代器对象自身,__next__()方法返回下一个元素。当没有元素可以返回时,__next__()方法抛出StopIteration异常。

from collections.abc import Iterable, Iterator

class MyDatas:
    def __init__(self, n):
        self.datas = [i for i in range(1, n + 1)]
        self.current_index = 0

    def __iter__(self):
        return self

    def __next__(self):
        if self.current_index >= len(self.datas):
            raise IndexError
        else:
            current = self.datas[self.current_index]
            self.current_index += 1
            return current


md = MyDatas(5)

print(isinstance(md, Iterable), isinstance(md, Iterator))

输出:

True True

 生成器(generator)是一种特殊的迭代器,它使用yield语句来返回一个值并暂停执行。生成器可以通过遍历来逐个获取元素,每次获取时都会从上次暂停的位置继续执行。

from collections.abc import Generator

def my_datas():
    yield 1
    yield 1
    yield 1
    yield 3
    yield 2
    return 100


r = my_datas()
print(type(r))
# for i in my_datas():
#     print(i)

# 使用try结合next异常捕获StopIteration 获取函数真实返回值
while True:
    try:
        print(next(r))
    except StopIteration as e:
        print(f"取完了")
        break

输出:

1
1
1
3
2
取完了

 装饰器(decorator)是一种用于修改或增强函数或类的功能的语法结构。装饰器可以将一个函数或类作为参数,并返回一个新的函数或类。装饰器常用于添加额外的功能,例如日志记录、性能分析等。

1.外部函数嵌套内部函数 2.外部函数将内部函数返回 3.内部函数可以访问外部函数局部变量。

def cost_time(f):
    def calc():
        start = time.time()
        f()
        print(f"{f.__name__}消耗时间{time.time()-start}")
    return calc


# cost_time(lambda: print("你是一个一个"))()

datas = [random.randint(0, 10000) for i in range(10000)]
datas2 = datas.copy()


@cost_time
def my_sort1():
    datas.sort(reverse=True)
    print(datas)


@cost_time
def my_sort2():
    datas3 = sorted(datas2, reverse=True)
    print(datas3)


my_sort1()

my_sort2()

输出:

my_sort1消耗时间0.007985115051269531
my_sort2消耗时间0.003493070602416992

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2063650.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++ TinyWebServer项目总结(1. 配置安装)

语雀文档 项目记录会先更新在我的语雀文档 :Webserver 然后再同步发送到CSDN上,有些格式问题实在是懒得改了,可能会导致大家看的不舒服,建议有需要的大家可以看看我的原文。 安装环境 Ubuntu 20.04 mysql Ver 8.0.39-0ubuntu0…

活动策划必备:活动页面设计全攻略

活动页面是营销策略中的重要环节,它不仅传递活动信息,更是吸引用户参与和转化的关键。设计师需要深入理解活动的核心价值和目标受众的需求,确保设计能够准确传达活动信息,同时激发用户的参与欲望。通过这样的设计,活动…

【AI Agent极限挑战赛】三大赛题揭晓

由AIGC开放社区联合联想拯救者、英特尔共同主办的【2024 AI Agent极限挑战赛】于8月17日在上海中庚聚龙酒店成功举办。赛事全面考察参赛者将AI技术应用于实际问题的能力。比赛内容包括对大语言模型的理解、提示词(Prompt)的结构化调优技术、个人助理Agen…

做谷歌seo如何确保网站的速度快?

想做谷歌seo,网站的快慢也是一个重要因素,至少不能慢的让客户等得不耐烦,以下是一些实用的小建议,帮助你提高页面加载速度,确保用户体验的顺畅。 压缩图片文件大小:图片通常是网页上最占用带宽的资源之一&a…

记一次:Datawhale AI夏令营-第五期-CV-Task01

前言:前面参加了第四期AIGC算是入门了,第五期我又来了,这期我参加了两个,计算机视觉CV所以按照惯例写一个笔记。 学习任务 一、计算机视觉CV的了解 1.1、什么是计算机视觉? 1.2、什么是YOLO?什么是物体…

SAP赋能消费品行业:创新与效率的双重驱动

在快速消费品行业,市场变化如同潮水般汹涌,消费者需求日益个性化,竞争愈发激烈。SAP系统以其先进的企业资源规划技术,为消费品行业提供了强大的数字化解决方案,助力企业在创新与效率的双重驱动下,实现业务的…

上位机图像处理和嵌入式模块部署(linux Qt程序的编译)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 linux上位机写程序,大家都喜欢用designer设计界面,用qt creator编写程序。这样其实也无可厚非。但是从效率和快速开发的角度…

视频智能分析工业排污检测算法及算法源码全套应用方案

工业排污检测算法在环境保护领域发挥着至关重要的作用,其主应用场景可以归纳如下: 应用场景 1、化工厂:监测化工厂的废气、废水排放情况,预防化学品泄漏污染环境。通过实时监测和数据分析,确保化工厂的排放符合环保标…

鸿蒙Harmony开发知识:Arkts函数

函数 函数声明 函数声明引入一个函数,包含其名称、参数列表、返回类型和函数体。 以下示例是一个简单的函数,包含两个string类型的参数,返回类型为string: function add(x: string, y: string): string {let z: string ${x} …

Xinstall:让App下载摆脱注册码的束缚,效率翻倍!

你是否曾经因为繁琐的注册码而放弃了某个App的下载?或者在安装过程中因为邀请码填写错误而功亏一篑?这些问题,相信很多人都曾遇到过。今天,我要为大家介绍一个神奇的品牌——Xinstall,它凭借强大的免注册码下载技术&am…

二叉树练习

1.认识树 树的根节点及其子树,都是相对的概念。在任何一棵树中都有一个根节点,而这棵树本身又可以是别的树的子树。树的基本概念有: A)双亲和孩子:一个节点的后继节点被称为该节点的孩子,该节点称为这些孩子的双亲。…

面试车载测试岗位,我们应该如何准备呢?

在进行车载测试方面的简历撰写以及面试时,我们需要注意的几点如下: 01、简历方面 1.没有相关项目怎么办? 要投递和面试的岗位所要参与的项目和做过的项目不可能是完全一样的。招聘企业更关注工作思路以及解决问题的思路。 不同的公司就算是做一样的项…

无人机:航拍书籍推荐

写在前面 学习航拍,整理一些书籍分享理解不足小伙伴帮忙指正 😃,生活加油 99%的焦虑都来自于虚度时间和没有好好做事,所以唯一的解决办法就是行动起来,认真做完事情,战胜焦虑,战胜那些心里空荡荡的时刻&…

JavaWeb基础 -- Servlet

JavaWeb基础 – Servlet 1.Servlet简介 1.1 Servlet是什么 Servlet本身是用Java编写的,运行在Web服务器上的应用程序,并作为Web浏览器和其他HTTP客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。Servlet可以收集来自网页表单输入的数据…

iOS 修改 tabbar 图标大小 01

0x00 transform 在点击 tabbar 时,通过修改图片的 transform 属性,来修改图片大小。 遍历 self.tabBar.subviews 来查找 图片。 imageView.transform CGAffineTransformScale(imageView.transform, 4, 4); 你会发现,根本改不动&#xff01…

CSS知识点详解:div盒子模型

盒子模型: 边框: border-color:边框颜色 border-width:边框粗细 1.thin 2.medium 3.thick 4.像素值 border-width:5px ; border-width:20px 2px; border-width:5px 1px 6px; border-width:1px 3px 5px 2px; 这个简写属性…

豆瓣评分9.0!Python3网络爬虫开发实战,堪称教学典范!

今天我们所处的时代是信息化时代,是数据驱动的人工智能时代。在人工智能、物联网时代,万物互联和物理世界的全面数字化使得人工智能可以基于这些数据产生优质的决策,从而对人类的生产生活产生巨大价值。 在这个以数据驱动为特征的时代&#…

Python导出所有已安装包及其版本信息

目录 导出导入 如果使用了虚拟环境,则先激活当前项目虚拟环境 venv\Scripts\activate导出 在当前目录下生成一个requirement.txt文件,记录当前环境的所有pyhton依赖包及其版本信息。 pip freeze > requirement.txt导入 pip install -r requiremen…

C语言手撕实战代码_循环单链表和循环双链表

C语言手撕实战代码_循环单链表和循环双链表 循环单链表习题1.建立带头结点的循环链表2.设计一个算法,将一个带有头结点的循环单链表中所有结点的链接方向逆转3.设计一个算法,将一个循环单链表左移k个结点4.设计一个算法将循环单链表中的结点p的直接前驱删除5.设计算…

如何使用 Higress 快速构建 AI 应用?

随着 AI 时代到来,基于大模型的应用对网关提出了新的要求,例如在不同 LLM 提供商之间进行负载均衡、构建 AI 应用的可观测能力、基于 token 的限流保护与配额管理、AI 应用内容安全等等。Higress 基于企业内外的丰富场景沉淀了众多面向AI的功能&#xff…