Python测开面试题之装饰器 | 干货

Python的装饰器是面试常被问到的问题之一,在面试Python测试开发时被问到的概率不低于70%,那么装饰器的原理是什么,怎么快速写出一个装饰器呢,接下来我们详细讲解装饰器的实现方法。

Python是一门动态语言,语法十分灵活多变,我们可以定义一个计算两数之和的加法函数,代码如下:

def add(x, y)
    return x + y

函数实现非常简单,输入两个参数,计算两个参数的和。我们可以直接调用函数

sum = add(3, 5)
print(sum)

也可以讲函数复制给一个变量,然后通过变量调用函数

sum = add
sum(3, 5)

此时sum不再是add函数的结果,而是add函数自身,因此可以被调用并且传入参数3,5

既然函数可以作为参数,那么函数当然也可以作为返回值,我们来实现一个嵌套函数来对add函数的两个参数进行校验

def decorator(func):
    def wrapper(x, y):
        try:
            _x = float(x)
        except Exception:
            _x = 0
        try:
            _y = float(x)
        except Exception:
            _y = 0
        sum = func(_x, _y)
        return sum
    return wrapper

由代码看出wrapper函数作为decorator函数的返回值返回,因此我们可以调用decorator函数来获取wrapper函数,接着我们调用wrapper函数对参数进行校验。

wrapper = decorator(add)
sum = wrapper(3, 5)
print(sum)

我们通过decorator函数来传入实际要运行的函数,通过wrapper函数来传入函数参数并调用函数,同时在wrapper函数实现需要的逻辑。

本质上由decorator和嵌套的wrapper组成一个共生体,这个共生体我们叫做闭包,闭包满足三个条件

  1. 函数嵌套函数
  2. 函数返回函数
  3. 函数间有参数引用

满足这三个条件的嵌套函数我们称之为闭包,闭包在python中即为修饰器,因此我们可以将代码写成如下形式

@decorator
def add(x, y)
    return x + y

python代码中常用修饰器很多,面试时我们经常被问到的有两种

  1. 请写一个修饰器
def decorator(func):
    def wrapper(*args, **kargs):
        # 实现自己的功能
        result = func(*args, **kargs)
        # 实现自己的功能
        return result
    return wrapper

用修饰器写一个单例函数

def singleton(cls):
    instances = {}
    def get_instance(*args, **kargs):
        if cls not in instances:
            instances[cls] = cls(*args, **kargs)
            return instances[cls] 
        return get_instance

好啦,Python的修饰器就讲到这里,欢迎大家一起交流啊。

在这里插入图片描述
另外,欢迎加入软件测试技术交流群 313782132 ~进群可领取免费软件测试资料以及群内测试大牛解惑!

测试工程师职业发展路线图

功能测试 — 接口测试 — 自动化测试 — 测试开发 — 测试架构师

加油吧,测试人!如果你需要提升规划,那就行动吧,在路上总比在起点观望的要好。事必有法,然后有成。

资源不错就给个推荐吧~

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值