软件测试/测试开发丨Python闭包函数和计时器学习笔记

news2024/11/27 19:55:29

闭包函数

  • 闭包的内部函数中,对外部作用域的变量进行引用
  • 闭包无法修改外部函数的局部变量
  • 闭包可以保存当前的运行环境
# 普通方法实现
def output_student(name, gender, grade=1):
    print(F"新学期开学啦,学生{name}是{gender},他是{grade}年级学生")


output_student('李白', '男生')
output_student('赵云', '男生')
output_student('孙尚香', '女生')
# 闭包函数
def student_grade(grade):
    def output_student(name, gender):
        print(F"新学期开学啦,学生{name}是{gender},他是{grade}年级学生")
    return output_student


student_info = student_grade(3)
student_info('李白', '男生')
student_info('赵云', '男生')
student_info('孙尚香', '女生')

需求:在函数调用的时候打印函数开始和函数结束

def aaa():
    print('good good study, happy happy everyday')


def bbb():
    print('everything is ok')


# 把中间的执行函数使用参数替代
def function_tips(func):
    print("函数开始执行")
    # 不写死函数,使用外部调用的方式
    func()
    print("函数结束执行")


# 传入一个函数对象
function_tips(bbb)

代码运行步骤:

图片

func参数等于上方的bbb函数,下方调用func就等于调用bbb函数,然后把bbb的内容带入func

图片

最后执行代码实现

图片

使用装饰器实现

# 使用装饰器实现
# 闭包定义,1、定义两个函数,一个内函数,一个外函数,timer是外函数
# 5、在装饰器执行的过程中传入一个参数,这个参数就是被装饰函数的对象
def timer(func):
    # inner作用:执行装饰器的逻辑;inner是内函数
    def inner():
        # 2、在内函数里面添加装饰器的逻辑
        print("代码开始运行")
        func()  # 6、添加被装饰函数的执行步骤
        print("代码结束运行")
    # 3、把内函数返回出去,之后可以被调用
    return inner


# 4、装饰器的使用:@+装饰器名称
@timer
def aaa():
    print('ccccc')


aaa()

---------->
代码开始运行
ccccc
代码结束运行

装饰器的练习

题目:实现一个计时器的装饰器,计算函数的执行时间

import datetime


def timer(func):
    def inner():
        # 获取当前时间
        start_time = datetime.datetime.now()
        func()
        # 获取结束时间
        end_time = datetime.datetime.now()
        print(f"函数执行时间{end_time - start_time}")

    return inner


@timer
def calc():
    print("aaaaaaa")


calc()

------------------------------->
aaaaaaa
函数执行时间0:00:00

被装饰函数存在参数怎么解决

# 装饰器的练习
# 题目:实现一个计时器的装饰器,计算函数的执行时间
import datetime


def timer(func):
    """
    1、如果装饰器内有参数,需要写在内置函数内,在调用的时候也要带上
    2、如果写死一个参数,但无法确定被装饰器的参数数量,这种写法会报错
    3、解决方法:把两个地方的参数全部换成不定长参数*args, **kwargs
    :param func:
    :return:
    """
    def inner(*args, **kwargs):
        # 获取当前时间
        start_time = datetime.datetime.now()
        func(*args, **kwargs)
        # 获取结束时间
        end_time = datetime.datetime.now()
        print(f"函数执行时间{end_time - start_time}")

    return inner


@timer
def calc(name, age, gender):
    print("aaaaaaa")
    print(name)
    print(age)
    print(gender)


calc('lili', 3, "女")

-------------------------------->
aaaaaaa
lili
3
女
函数执行时间0:00:00

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!  

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

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

相关文章

OpenCV-Python(21):轮廓特征及周长、面积凸包检测和形状近似

2. 轮廓特征 轮廓特征是指由轮廓形状和结构衍生出来的一些特征参数。这些特征参数可以用于图像识别、目标检测和形状分析等应用中。常见的轮廓特征包括: 面积:轮廓所包围的区域的面积。周长:轮廓的周长,即轮廓线的长度。弧长&…

Python流星雨完整代码

文章目录 环境需求完整代码详细分析环境需求 python3.11.4PyCharm Community Edition 2023.2.5pyinstaller6.2.0(可选,这个库用于打包,使程序没有python环境也可以运行,如果想发给好朋友的话需要这个库哦~)【注】 python环境搭建请见:https://want595.blog.csdn.net/arti…

CSS 向上扩展动画

上干货 <template><!-- mouseenter"startAnimation" 表示在鼠标进入元素时触发 startAnimation 方法。mouseleave"stopAnimation" 表示在鼠标离开元素时触发 stopAnimation 方法。 --><!-- 容器元素 --><div class"container&q…

架构设计系列 5:常见架构介绍

前面讲了架构是什么&#xff0c;架构的发展史&#xff0c;架构设计的基础理论&#xff0c;这次针对常见架构设计风格进行介绍和分析。 一、MVC&#xff1a;三层架构经典 经典的 MVC 架构&#xff08;Model-View-Controller&#xff09;架构是软件系统架构设计中的经典&#xf…

【Python基础】字符串

文章目录 [toc]什么是字符串索引示例索引越界 切片语法示例 字符串方法find()方法rfind()方法count()方法replace()方法 个人主页&#xff1a;丷从心 系列专栏&#xff1a;Python基础 什么是字符串 如下定义的变量url存储的是字符串类型的值 url www.baidu.com print(url)u…

LeetCode刷题--- 解数独

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题 http://t.csdnimg.cn/yUl2I 【C】 ​​​​​​http://t.csdnimg.cn/6AbpV 数据结构与算法 ​​​​​http://t.csdnimg.cn/hKh2l 前言&#xff1a;这个专栏主…

泛目录是干什么用的蚂蚁seo泛程序

泛目录是干什么用的蚂蚁seo泛程序目录 泛目录是一种常见的网站优化方法&#xff0c;属于黑帽技术的一种。它的核心原理是利用高权重的网站继承目录&#xff0c;然后快速获得收录与排名。这种方法可以帮助网站在搜索引擎中获得更好的排名&#xff0c;从而吸引更多的流量。 泛目…

学习使用wps将ppt的页面保存为图片的方法

学习使用wps将ppt的页面保存为图片的方法 方案 方案 1、打开ppt&#xff0c;点击文件&#xff0c;另存为&#xff0c;选择文件类型为图片格式&#xff0c;jpg或者png&#xff0c;如下图&#xff1a; 2、点击每张幻灯片

利用MATLAB构建特殊通用矩阵

在MATLAB编程中&#xff0c;经常需要遇到一些特殊的通用矩阵&#xff0c;本篇主要介绍的是MATLAB中可能会用到特殊矩阵。 1、零矩阵 MATLAB使用zeros函数来创建零矩阵&#xff0c;所谓零矩阵就是矩阵中所有元素皆为0的矩阵。zeros函数的调用方式如下所示&#xff1a; &#…

Android 13 - Media框架(28)- MediaCodec(三)

上一节我们了解到 ACodec 执行完 start 流程后&#xff0c;会把所有的 input buffer 都提交给 MediaCodec 层&#xff0c;MediaCodec 是如何处理传上来的 buffer 呢&#xff1f;这一节我们就来了解一下这部分内容。 1、ACodecBufferChannel::fillThisBuffer ACodec 通过调用 A…

【Linux】指令(本人使用比较少的)——笔记(持续更新)

文章目录 ps -axj&#xff1a;查看进程ps -aL&#xff1a;查看线程echo $?&#xff1a;查看最近程序的退出码jobs&#xff1a;查看后台运行的线程组fd 任务号&#xff1a;将后台任务提到前台bg 任务号&#xff1a;将暂停的后台程序重启netstat -nltp&#xff1a;查看服务及监听…

<软考高项备考>《论文专题 - 34 沟通管理(2) 》

3 过程2-管理沟通 3.1 问题 4W1H过程做什么确保项目信息及时且恰当地收集、生成、发布、存储、检索、管理、监督和最终处置的过程作用&#xff1a;促成项目团队与干系人之间的有效信息流动为什么做实现有效率、有效果沟通谁来做项目管理团队/项目团队&#xff08;如果项目规模…

CSS 纵向扩展动画

上干货 <template><!-- mouseenter"startAnimation" 表示在鼠标进入元素时触发 startAnimation 方法。mouseleave"stopAnimation" 表示在鼠标离开元素时触发 stopAnimation 方法。 --><!-- 容器元素 --><div class"container&q…

如何借助边缘网关打造智慧配电房安全方案

配电房是电力系统的重要组成部分&#xff0c;通常设置有各种高压配电装置和箱柜&#xff0c;是企业安全管理的重点。传统的人工巡检和监控总是难以避免疏漏&#xff0c;导致风险隐患的产生和扩大。 随着物联网、边缘计算、设备联动控制等技术的普及应用&#xff0c;佰马针对配电…

B3842 起动电流小,工作频率 可达500kHz的Dc-Dc开关电源芯片

B3842/43/44是专为脱线和Dc-Dc开关电源应用设计的恒频电流型Pwd控制器内部包含温度补偿精密基准、供精密占空比调节用的可调振荡器、高增益混放大器、电流传感比较器和适合作功率MOST驱动用的大电流推挽输出颇以及单周期徊滞式限流欠压锁定、死区可调、单脉冲计数拴锁等保护电路…

一文入门Qt Quick

以下内容为本人的著作&#xff0c;如需要转载&#xff0c;请声明原文链接 微信公众号「ENG八戒」https://mp.weixin.qq.com/s/dvamU6q5lZQb5hztfD2zNg 初识Qt Quick 很高兴可以来到这一章&#xff0c;终于可以开始讲讲最近几年Qt的热门技术Quick这一块了。 啥是Qt&#xff1…

Qt+Opencv:人脸检测

话接上一篇&#xff0c;我们仍使用在上篇《QtOpencv&#xff1a;Qt中部署opencv》创建的Qt项目来测试opencv提供的sample。 在正式开始本篇之前&#xff0c;我们先说做一下准备工作&#xff1a; 一、opencv官方文档 学习最权威和最可靠的方式&#xff0c;就是阅读官方文档和…

太空中的人形机器人:探索新疆界

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

YOLOv5改进 | 2023Neck篇 | CCFM轻量级跨尺度特征融合模块(RT-DETR结构改进v5)

一、本文介绍 本文给大家带来的改进机制是轻量级跨尺度特征融合模块CCFM&#xff08;Cross-Scale Feature Fusion Module&#xff09;其主要原理是&#xff1a;将不同尺度的特征通过融合操作整合起来&#xff0c;以增强模型对于尺度变化的适应性和对小尺度对象的检测能力。我将…

SolidWorks高级装配技能

SolidWorks高级装配技能有协调技能&#xff0c;配合计算速度:关系协调(巧合、平行)&#xff0c;逻辑配合(宽度、凸轮、齿轮)&#xff0c;距离/角度配合&#xff0c;有限配合&#xff0c;使用子组件。 使用子组件根据产品的层次结构组织产品&#xff0c;避免将所有零件添加到一个…