博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python面试装饰器_Python测开面试题之装饰器
阅读量:4475 次
发布时间:2019-06-08

本文共 1369 字,大约阅读时间需要 4 分钟。

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  大猫

出  处:微信公众号:自动化软件测试平台

版权说明:欢迎转载,但必须注明出处,并在文章页面明显位置给出文章链接

你可能感兴趣的文章
"仿matlab科学软件"项目准备
查看>>
wordpress 插件推荐
查看>>
抽象工厂
查看>>
AC自动机
查看>>
防止重复提交的思路
查看>>
Linux tr命令使用方法
查看>>
jetty启动设置端口
查看>>
cyyz: Day 2 线段树知识整理
查看>>
[Selenium]计算坐标进行拖拽,重写dragAndDropOffset
查看>>
★《唐琅探案》后记【3】
查看>>
Angular学习笔记(2)
查看>>
双击启动tomcat中的startup.bat闪退原因及解决方法
查看>>
完成个人中心—导航标签
查看>>
【C++】C++中变量的声明与定义的区别
查看>>
前端性能优化
查看>>
static
查看>>
属性动画
查看>>
Swift 字符串
查看>>
Python 生成器 Generator 和迭代器 Iterator
查看>>
实现icon和文字垂直居中的两种方法-(vertical-align and line-height)
查看>>