越学越上瘾   12.12 来百知学IT   课程全面升级

立刻报名学习

400-616-5551

您所在位置: 首页> 学习资讯> Python测开面试题之装饰器

Python测开面试题之装饰器

发布百知教育 来源:学习资讯 2019-08-19

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组成一个共生体,这个共生体我们叫做闭包,闭包满足三个条件


函数嵌套函数

函数返回函数

函数间有参数引用


满足这三个条件的嵌套函数我们称之为闭包,闭包在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


2.用修饰器写一个单例函数


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的修饰器就讲到这里,欢迎大家一起交流啊。



注释:本文来源于公众号,版权及内容归原作者所有。

上一篇:Python一条语句实现文件拷贝功能

下一篇:java培训班 | JDK反序列化Gadgets-7u21

相关推荐