Python核心编程三大神兽——迭代器、生成器 、以及装饰器

news2025/1/31 18:37:22

装饰器

装饰器概述

装饰器本质:函数闭包的语法糖,一个函数,该函数用来处理其他函数,在不改变源函数的情况下添加功能,装饰器的返回值可以是一个函数对象

使用场景:插入日志,事务处理,缓存,权限校验等

函数闭包

必须函数嵌套函数

内嵌函数必须引用一个定义在闭合范围内(外部函数里)的变量——内部函数引用外部变量

外部函数必须返回内嵌函数——必须返回那个内部函数

闭包的作用:可以保持程序上一次运行后的状态然后继续执行

import time



def show_time(func):

	def inner():

		start_time = time.time() #开始时间

        func()#函数调用

        end_time = time.time()#结束时间

        print(f"函数执行时间{end_time-start_time}")

    return inner #返回函数对象



@show_time   #相当于 case = show_time(case) 语法糖

def case():

    print("执行测试用例")

    time.sleep(1)



case()

迭代器

什么是迭代?

迭代是一个重复的过程,即每一次重复为了一次迭代

并且每次迭代的结果都是下次迭代的初始值

迭代器是用来迭代取值的工具

可迭代对象

内置有iter方法的对象都是可迭代对象

  • 字符串
  • 列表
  • 元组
  • 字典
  • 集合

迭代器对象

迭代器对象有iter和next方法的对象,执行迭代器.next()方法就会计算迭代器中的下一个值

alist = [1,2,3] #可迭代对象

iter_test = iter(alist) #迭代器对象

print(next(iter_test)) #输出1

print(next(iter_test)) #输出2

print(next(iter_test)) #输出3

print(next(iter_test)) #抛出StopIteration的异常,代表无值可取,迭代结束


生成器

生成器是特殊的迭代器,若函数体包含yield关键字,再调用函数,并不会执行函数体代码,得到的返回值即生成器对象

特点:同一时间只存储一个值,节省内存空间

生成器内置有iter和next方法,所以生成器本身就是一个迭代器

yield相当于 return 返回一个值,并且记住这个返回的位置,下次迭代时,代码从yield的下一条语句开始执行

每次使用next()方法就会执行到下一个yield

def hello():

    print('hello')

    yield

    print("word")

    yield

g = hello()

print(g)

next(g)

next(g)



#结果

<generator object hello at 0x00000273F34CC0B0>

hello

word

资源分享【这份资料必须领取~】

下方这份完整的软件测试视频学习教程已经上传CSDN官方认证的二维码,朋友们如果需要可以自行免费领取 【保证100%免费】

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

网心科技入选亿欧《2022年中国边缘计算产业研究报告》

近日,亿欧智库对外发布了《2022年中国边缘计算产业研究报告》,《报告》公布了“边缘计算产业图谱”和“行业新锐:中国边缘计算技术领先企业榜单”两项,网心科技(OneThing)均成功入选,彰显了网心科技在边缘计算领域的技术实力和市场领先地位。 当前,边缘计算与千行百业的深度融合…

51单片机实训day2——创建Keil工程

以管理员身份打开软件&#xff01;&#xff01;&#xff01;以管理员身份打开软件&#xff01;&#xff01;&#xff01;以管理员身份打开软件&#xff01;&#xff01;&#xff01; 内 容&#xff1a;Keil工程创建 学 时&#xff1a;2学时 知识点&#xff1a;开发固件库介绍…

从英语翻译到人工智能:我如何用两年时间跨界转行

在这两年里&#xff0c;我经历了以下大大小小的里程碑&#xff1a; 2016 年初&#xff1a;在德国刚开始读英语语言学硕士没多久&#xff0c;萌生了转方向到计算机语言学&#xff08;Computational Linguistics&#xff0c;后来我才知道那与自然语言处理 Natual Language Proces…

【树莓派不吃灰】兄弟连篇⑦ 日志管理

目录1.日志管理1.1 日志文件的功能和分类1.2 日志文件保存位置和文件介绍1.3 内核及系统日志1.4 日志消息的级别1.5 日志记录的一般格式1.6 用户日志分析1.6.1 users 查看能登录的用户1.6.2 who,w查看在线登录的用户1.6.3 last,lastb查看登录成功的用户和登录失败的用户1.7 日志…

为什么现在Python在量化交易中这么火?

前言 Python作为发展较快的编程语言&#xff0c;可以让程序员更加高效地工作和集成系统。Python的语法也是优先考虑了可读性&#xff0c;同时支持较少的代码行。 一般来说&#xff0c;Python语言是中低端量化交易平台最普遍的选择。中低端量化交易平台&#xff0c;支持复杂度…

40 CPP函数模板高级

#include "iostream" using namespace std; template <typename T1, typename T2> void func(T1 a, T2 b) {//其它代码??? tmp a b; //返回值该用什么呢?//其它代码 } void test() { } int main() {test();return 0; } 1 decltype关键字 在C中&#xf…

工控CTF之协议分析1——Modbus

协议分析 流量分析 主要以工控流量和恶意流量为主&#xff0c;难度较低的题目主要考察Wireshark使用和找规律&#xff0c;难度较高的题目主要考察协议定义和特征 简单只能简单得干篇一律&#xff0c;难可以难得五花八门 常见的工控协议有&#xff1a;Modbus、MMS、IEC60870、…

猿如意中的【Parrot-树莓派-5.0 arm64位 】工具框架的介绍详情

目录 一、工具名称 二、下载安装渠道 2.1 什么是猿如意&#xff1f; 2.2 如何下载猿如意&#xff1f; 三、工具介绍 四、Parrot-树莓派-5.0 arm64位功能介绍 五、软件安装过程 5.1 如何在猿如意中下载开发框架Parrot-树莓派-5.0 arm64位&#xff1f; 5.2 下载完成的Pa…

JMeter中如何简单地使用cookie

JMeter是一个集接口调试和性能测试于一体的测试工具&#xff0c;是很多技术型测试人员的必备工具&#xff0c;下面介绍一个如何简单地在JMeter中使用cookie登录一个网站并进行简单断言&#xff0c;拿广大测试人员最熟悉的51testing论坛来举例~ 一、收集登录数据 1.用Chrome打…

真正“自学”入门编程/程序员是一种怎样的体验

当年没考上大学&#xff0c;读了自考。 从那以后就开始了自学生涯&#xff0c;第一年还乖乖的去听课&#xff0c;第二年就完全放弃课堂了。 后来考本&#xff0c;读研&#xff0c;中间穿插学点通信&#xff0c;画图什么的&#xff0c;全部自己来。 仔细想想&#xff0c;读研…

我转行前端花了11个月

当你看到这行文字时&#xff0c;我假设你是一个准备转行前端&#xff0c;或者正在转行前端的人。我刚花了11个月转行前端。和你聊聊我的故事吧。 转行花了多久&#xff1f;11个月 准备转行前端时&#xff0c;我看了很多过来人写的转行经验。别人什么条件&#xff0c;转行花了…

SpringBoot3.0整合chatGPT

导读 导读 | 12月总体来说互联网的技术圈是非常热闹的&#xff0c;chatGPT爆火&#xff0c;SpringBoot3.0发布等重磅陆消息续进入大家的视线&#xff0c;而本文作者将以技术整合的角度&#xff0c;带大家把最火的两个技术整合在一起。读完本文&#xff0c;你将熟悉SpringBoot3…

(2022年12月最新)SpringBoot远程代码执行whitelabel error page SpEL RCE漏洞复现

1、 漏洞原理 spring boot 处理参数值出错&#xff0c;流程进入org.springframework.util.PropertyPlaceholderHelper 类中 此时 URL 中的参数值会用 parseStringValue 方法进行递归解析。其中 ${} 包围的内容都会被org.springframework.boot.autoconfigure.web.ErrorMvcAutoC…

电机分类和原理

一&#xff1a;核心原理 电生磁。 电机&#xff08;英文&#xff1a;Electric machinery&#xff0c;俗称“马达”&#xff09;是指依据电磁感应定律实现电能转换或传递的一种电磁装置。分为电动机&#xff08;符号为M&#xff09;和发电机&#xff08;符号为G&#xff09;。…

如何做好预算管理?预算上接战略,下接绩效,如何形成战略-计划-预算-绩效的闭环?

如何做好预算管理&#xff1f; 以前觉得经营是对净利润负责&#xff0c;年底有钱赚就可以&#xff0c;从未考虑过如何才能赚更多的钱&#xff0c;也未考虑过经营是对股东负责。 现在觉得经营的门道确实很大&#xff0c;以前看的面窄&#xff0c;并没有真正理解预算的意义&…

WPF中如何实现页面的切换

总目录 文章目录总目录前言一、准备工作1.搭建一个简单的mvvm项目结构二、实现1.使用Frame控件的方式实现2.使用反射的方式实现3.实现效果总结前言 本文主要讲述如何在同一个窗体内&#xff0c;实现不同功能模块的页面切换。 一、准备工作 1.搭建一个简单的mvvm项目结构 首先…

『纯canvas实现』你可能想象不到,粒子效果配合时钟还能这么玩?

前言 大家好&#xff0c;我们知道一般学习 canvas 时&#xff0c;做的最多的莫过于各种时钟&#xff0c;像下面这样的&#xff1a; 亦或是这样的&#xff1a; 或是这样的&#xff1a; 上面给大家展示了三种风格各异的时钟效果&#xff0c;但都没有让人眼前一亮的感觉&#xff…

一颗红心,三手准备,分别基于图片(img)/SCSS(样式)/SVG动画实现动态拉轰的点赞按钮特效

华丽炫酷的动画特效总能够让人心旷神怡&#xff0c;不能自已。艳羡之余&#xff0c;如果还能够探究其华丽外表下的实现逻辑&#xff0c;那就是百尺竿头&#xff0c;更上一步了。本次我们使用图片、SCSS样式以及SVG图片动画来实现“点赞”按钮的动画特效&#xff0c;并比较不同之…

CLM陆面过程模式

NCAR陆面模式CLM (Community Land Model)是地球系统模式CESM (Community Earth System Model)中的陆面过程模式分量&#xff0c;是在结合了BATS、LSM和IAP94等众多陆面模式的优点后&#xff0c;加入水文过程而开发出的综合性陆面模式&#xff0c;是目前国际上发展最为完善且得到…

java实现每日给女友微信发送早安等微信信息

大家好&#xff0c;我是雄雄。 前言 据说这个功能最近在抖音上很火&#xff0c;我没有抖音&#xff0c;没有看到。 但是我在掘金和CSDN上看了&#xff0c;相关案例确实很多&#xff0c;但是大家都是借助于了微信服务号&#xff0c;在我看来&#xff0c;效果很不佳。 其实我原…