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

闭包函数

  • 闭包的内部函数中,对外部作用域的变量进行引用
  • 闭包无法修改外部函数的局部变量
  • 闭包可以保存当前的运行环境
# 普通方法实现
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_studentstudent_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 datetimedef 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 datetimedef 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://xiahunao.cn/news/2659796.html

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

相关文章

代码随想录二刷 | 二叉树 | 合并二叉树

代码随想录二刷 | 二叉树 | 合并二叉树 题目描述解题思路递归迭代 代码实现递归迭代 题目描述 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。 你需要将他们合并为一个新的二叉树。合并…

MSVC++ 编译 module std

环境:windows 10 19045.xxxx 只安装了MSVC C 工具链和一个版本的SDK,SDK版本建议选一个和本机系统匹配的。 cd %USERPROFILE%\source\repos\STLModules mkdir x86 mkdir x64 打开“x86 Native Tools Command Prompt for VS 2022”控制台,…

MySQL数据库多版本并发控制(MVCC)

在数据库中,并发控制是确保多个事务能够同时执行,而不会导致数据不一致或冲突的关键机制。多版本并发控制(MVCC)是一种流行的并发控制方法,它可以允许多个事务同时读取同一数据项的不同版本,而不会相互阻塞。本文将讨论MVCC的原理…

软件测试/测试开发丨函数式编程学习笔记

一.高阶函数 高阶函数:既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。 1. map/reduce map() : 函数接收两个参数,一个是函数,一个是…

231227-9步在RHEL8.8配置本地yum源仓库

Seciton 1:参考视频 RHEL8配置本地yum源仓库-安徽迪浮_哔哩哔哩_bilibili Seciton 2:具体操作 🎯 第1步:查看光驱文件/dev/sr0是否已经挂载?此处已挂在 [lgklocalhost ~]$ df -h 🎯 第1步:查看…

案例232:基于微信小程序的学生实习与就业管理系统设计与实现

文末获取源码 开发语言:Java 框架:springboot JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder …

常用的 linux 命令

常用的 linux 命令 1.从其他机器拷贝文件夹2.查看哪个程序在用特定端口3.实时监控日志文件内容4.查看指定用户拥有的进程5.查看磁盘空间使用情况6.文件搜索which(whereis) 显示系统命令所在目录find 查找任何文件或目录1) 根据文件名称查找2)…

【Linux】Linux服务器ssh密钥登录

ssh密码登录 ssh root地址 #需要输入密码ssh密钥登录 Linux之间密钥登录 生成公私钥 #生成公钥私钥 ssh-keygen #默认目录,默认密码空ssh-copy-id #拷贝ID到目标服务器 ssh-copy-id -i id_rsa.pub root192.168.8.22 ssh-copy-id -i id_rsa.pub root192.168.8.33…

Docker七 | 搭建Swarm集群

目录 创建Swarm集群 创建管理节点 增加工作节点 查看集群 部署服务 新建服务 查看服务 服务伸缩 增加服务 减少服务 删除服务 创建Swarm集群 创建管理节点 在192.168.117.131下执行docker swarm init命令的节点自动成为管理节点 [rootlocalhost ~]# docker swar…

Zookeeper-Zookeeper特性与节点数据类型详解

1.Zookeeper介绍 ZooKeeper 是一个开源的分布式协调框架,是Apache Hadoop 的一个子项目,主要用来解决分布式集群中应用系统的一致性问题。Zookeeper 的设计目标是将那些复杂目容易出错的分布式一致性服务封装起来,构成一高效可靠的原…

C语言——数据在内存中的存储【整型数据在内存中的储存,大小端字节序储存,浮点型数据在内存中的储存】

📝前言: 在前面的三篇文章中我们已经完成了对字符函数和字符串函数的学习,现在就让我们探索新领域,更加深入的理解**数据在内存中的存储方式**: 1,整数在内存中的存储 2,⼤⼩端字节序存储 3&…

SuperMap Hi-Fi 3D SDK for Unity矢量面贴地贴模型

作者:kele 一、背景 SuperMap Hi-Fi 3D SDK(2023 11i) for Unity推出新功能:支持矢量面同时贴地形图层和模型图层,并且能实现数据点击查询属性、更改初始填充颜色、初始边框线颜色、选中填充颜色、选中边框线颜色、控…

基于SSM实现的电动汽车充电网点管理系统

一、系统架构 前端:jsp | jquery | bootstrap | css 后端:spring | springmvc | jdbc 环境:jdk1.8 | mysql 二、代码及数据库 三、功能介绍 01. web端-首页 02. web端-登录 03. web端-注册 04. web端-我要充电 05. web端-个人中心-消…

Springcloud Alibaba使用Canal将Mysql数据实时同步到Redis保证缓存的一致性

目录 1. 背景 2. Windows系统安装canal 3.Mysql准备工作 4. 公共依赖包 5. Redis缓存设计 6. mall-canal-service 1. 背景 canal [kənl] ,译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。其诞…

nginx源码分析-1

使用gdb查看函数上下文: gdb attach nginx的work线程 监听端口状态时: 断点打在ngx_http_process_request 并通过浏览器触发请求时:

把这些软件测试经典面试题!全背下来,拿offer就像喝水一样!

1、什么是兼容性测试?兼容性测试侧重哪些方面? 兼容测试主要是检查软件在不同的硬件平台、软件平台上是否可以正常的运行,即是通常说的软件的可移植性。兼容的类型,如果细分的话,有平台的兼容,网络兼容&am…

哈希桶的模拟实现【C++】

文章目录 哈希冲突解决闭散列 (开放定址法)开散列 (链地址法、哈希桶)开散列实现(哈希桶)哈希表的结构InsertFindErase 哈希冲突解决 闭散列 (开放定址法) 发生哈希冲突时&#xf…

【算法刷题】Day26

文章目录 1. 买卖股票的最佳时机含冷冻期题干:算法原理:1. 状态表示:2. 状态转移方程3. 初始化4. 填表顺序5. 返回值 代码: 2. 替换所有的问号题干:算法原理:代码: 1. 买卖股票的最佳时机含冷冻…

组件间的值传递:改进若依框架中的BarChart.vue组件

改进前的BarChart 如下是若依(Ruoyi)框架中的BarChart.vue文件&#xff0c;该BarChart.vue无法实现组件间的值传递。到这里您不妨可以试试该如何去传值。如果您不想思考&#xff0c;请看改进后的BarChart。直接拿走使用&#xff01; <template><div :class"cla…

大量数据的渲染优化-分页渲染方案

文章目录 直接渲染数据的拆分使用定时器分页渲染 相信有一道耳熟能详的题目&#xff0c;如果前端获取到了 10w 条数据&#xff0c;应该怎么渲染&#xff1f;本文就以此为例&#xff0c;来进行切入&#xff0c;解析大量数据渲染的方案 直接渲染 样式代码比较简单&#xff0c;我就…