Python测开面试题之装饰器
Python的装饰器是面试常被问到的问题之一,在面试Python测试开发时被问到的概率不低于70%,那么装饰器的原理是什么,怎么快速写出一个装饰器呢,接下来我们详细讲解装饰器的实现方法。
Python是一门动态语言,语法十分灵活多变,我们可以定义一个计算两数之和的加法函数,代码如下:
defadd(x, y)
returnx + y
函数实现非常简单,输入两个参数,计算两个参数的和。我们可以直接调用函数
sum= add(3,5)
print(sum)
也可以讲函数复制给一个变量,然后通过变量调用函数
sum= add
sum(3,5)
此时sum不再是add函数的结果,而是add函数自身,因此可以被调用并且传入参数3,5
既然函数可以作为参数,那么函数当然也可以作为返回值,我们来实现一个嵌套函数来对add函数的两个参数进行校验👇🏻
defdecorator(func):
defwrapper(x, y):
try:
_x = float(x)
exceptException:
_x =0
try:
_y = float(x)
exceptException:
_y =0
sum = func(_x, _y)
returnsum
returnwrapper
由代码看出wrapper函数作为decorator函数的返回值返回,因此我们可以调用decorator函数来获取wrapper函数,接着我们调用wrapper函数对参数进行校验。
wrapper= decorator(add)
sum = wrapper(3,5)
print(sum)
我们通过decorator函数来传入实际要运行的函数,通过wrapper函数来传入函数参数并调用函数,同时在wrapper函数实现需要的逻辑。
本质上由decorator和嵌套的wrapper组成一个共生体,这个共生体我们叫做闭包,闭包满足三个条件
函数嵌套函数
函数返回函数
函数间有参数引用
满足这三个条件的嵌套函数我们称之为闭包,闭包在python中即为修饰器,因此我们可以将代码写成如下形式
@decorator
def add(x, y)
returnx + y
python代码中常用修饰器很多,面试时我们经常被问到的有两种
1.请写一个修饰器
defdecorator(func):
defwrapper(*args, **kargs):
# 实现自己的功能
result = func(*args, **kargs)
# 实现自己的功能
return result
return wrapper
2.用修饰器写一个单例函数
defsingleton(cls):
instances = {}
defget_instance(*args, **kargs):
ifclsnotininstances:
instances[cls] = cls(*args, **kargs)
returninstances[cls]
returnget_instance
好啦,Python的修饰器就讲到这里,欢迎大家一起交流啊。
作 者:Testfan 大猫
出 处:微信公众号:自动化软件测试平台
版权说明:欢迎转载,但必须注明出处,并在文章页面明显位置给出文章链接
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)