python装饰器作用噜咕_python 装饰器的实际作用有哪些

终于知道python的装饰器是怎么回事,那在工作中,到底能干吗用呢?

尤其对我这个只会写写脚本又不做python开发的小测试/手动无辜脸。

先说结论,肯定是有用处滴。

一、自动化测试中使用

就拿写的自动化测试来说吧,如果我想统一的输出点东西,比如:case的运行时长,case名称等等,那就可以用起来。

首先,看下最简单的case,没有装饰器:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

import pytest

def test_01():

a= 1

b= 2

assert a < b

def test_02():

a= 1

b= 1

assert a-b== 0

if __name__== '__main__':

pytest.main(['demo_test.py'])

这个用例文件里有2个case,运行一下:

============================= test session starts =============================

platform win32 -- Python 3.8.5, pytest-6.0.1, py-1.9.0, pluggy-0.13.1

rootdir: D:\练习

collected 2 items

demo_test.py .. [100%]

============================== 2 passed in 0.01s ==============================

[Finished in 0.4s]

运行通过就是.,所以2个case都通过了,有2个.。

如果我想在运行结果里看到每个case的执行时长,那么就可以写一个装饰器去处理:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

import pytest

import functools

import time

def log_execute_time(func):

@functools.wraps(func)

def wrapper(*args,**kwargs):

start= time.perf_counter()

res= func(*args,**kwargs)

end= time.perf_counter()

print("{} 用时 {} ms".format(func.__name__, (end- start)* 1000))

return res

return wrapper

@log_execute_time

def test_01():

a= 1

b= 2

assert a < b

@log_execute_time

def test_02():

a= 1

b= 1

assert a-b== 0

if __name__== '__main__':

pytest.main(['-s','demo_test.py'])

运行一下:

============================= test session starts =============================

platform win32 -- Python 3.8.5, pytest-6.0.1, py-1.9.0, pluggy-0.13.1

rootdir: D:\练习

collected 2 items

demo_test.py

test_01 用时 0.0007999999999674934 ms .

test_02 用时 0.0012999999999818712 ms .

============================== 2 passed in 0.03s ==============================

[Finished in 0.4s]

可以看到,每个case执行会打印出执行耗时。

上述的这个例子是在实现自动化测试时的场景,具体还是要看你怎么去挖掘你的需求。

二、其他python开发向的用法

我也去查了下其他的用法,其实在python开发中,用途还是很多的,其中就还有大家熟悉的"身份认证"。

比如大家爱上博客园,你不登录账号也可以浏览博客。当你看着兴起,自己也想评论或者发文的时候,发现

提示你需要登录,这种场景就可以用上装饰器。代码举例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

import functools

def authenticate(func):

@functools.wraps(func)

def wrapper(*args,**kwargs):

request= args[0]

if check_user_logged_in(request):# 检查用户是否登录

return func(*args,**kwargs)# 如果登录了,就可以执行函数post_comment() 发送评论

else:

raise Exception('Authentication failed')# 否则,身份验证失败

return wrapper

@authenticate

def post_comment(request)

pass

上述代码只是说了这个意思,辅助描述下场景。

除此之外,还可以在输入合理性检查、缓存等多个场景中使用,毕竟不是做开发的,这里就不再深入了。

三、装饰器小结

装饰器本质上是一个python函数或者类,可以让其他函数或类在不需要做任何代码修改的前提下,增加额外的功能。

装饰器的返回值也是一个函数对象或者类对象。

有了装饰器,我们可以抽离出大量与函数功能本身无关的雷同代码到装饰器中,并且可以重用。

说到这,我感觉跟AOP面向切面编程有点像。

大家还知道哪些应用场景,也欢迎留言补充。

以上就是python 装饰器的实际作用有哪些的详细内容,更多关于python 装饰器作用的资料请关注服务器之家其它相关文章!

原文链接:https://www.cnblogs.com/pingguo-softwaretesting/p/13615596.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/340295.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器人辅助的符文天赋_10.5版本T1辅助盘点 进攻型辅助主宰下路

摘要&#xff1a;今天为大家推荐10.5版本的三大T1辅助&#xff0c;在当前版本每层塔钱增加到160后&#xff0c;这些前期进攻性较强的辅助更容易上分&#xff0c;他们都有直接或间接击毁镀层的能力&#xff0c;赛娜推线压制后的远程点塔&#xff0c;机器人靠着钩子的威胁上前、日…

html5新变化,HTML5的新变化,分享

1、新的2、图形元素 figure &#xff0c;将与相结合&#xff0c;使图片标题与图片相搭配%3、不需要为链接和脚本标签添加类型的属性4、h5中不需要用引号将属性包裹起来5、使得内容可编辑。”contenteditable”&#xff0c;它将允许用户编辑元素(包括他的子元素)内包含的任何文本…

javafx属性_JavaFX技巧11:更新只读属性

javafx属性自定义控件通常具有“只读”属性。 这意味着不能从控件外部进行设置&#xff0c;甚至不能从自己的皮肤类别进行设置。 通常&#xff0c;控件的行为会导致更改只读属性。 在JavaFX中&#xff0c;此行为可以在控件本身和皮肤中实现。 因此&#xff0c;有时我们最终希望…

dataframe 选择输出_使用 Python 实现机器学习特征选择的 4 种方法

(给数据分析与开发加星标&#xff0c;提升数据技能)英文&#xff1a;Sugandha Lahoti&#xff0c;转自&#xff1a;数据派(ID&#xff1a;datapi)&#xff0c;翻译&#xff1a;李洁注&#xff1a;本文节选自Ankit Dixit所著的《集成机器学习》(Ensemble Machine Learning)一书。…

ps一点等于多少厘米_企业展厅设计关于展台你了解多少?

发 现 生 活 中 最 美 好 的 设 计打开音乐聆听设计伽的声音水北展陈今日份文章&#xff1a;企业展厅设计关于展台你了解多少&#xff1f;企业展厅设计展台是各种展品、实物、模型以及沙盘的展示介质之一。企业展厅设计展台的设计和选用要从企业展厅设计展品的特征出…

计算机应用能力文字录入,2017全国专业技术人员计算机应用能力考试题库-Excel,Word,XP.pdf...

《博大考神》2006版之excel2003题库版3一、Excel的应用基础3二、excel界面4三、数据的输入6四、插入对象8五、编辑工作表9六、创建公式11七、使用函数和主要函数12八、普通函数13九、工作表的格式设置(一)14十、工作表的格式设置(二)15十一、打印16十二、管理工作表和保护数据1…

用python turtle库画正方形_用Python Turtle画一个正方形

你的主要错误是这两行顺序错误&#xff1a;window.exitonclick() #click the screen to close it draw_square() exitonclick()&#xff0c;或mainloop()&#xff0c;或done()应该是最灵活的&#xff0c;针对上述和样式问题&#xff0c;你的代码需要重新编写&#xff1a;import…

HATEOAS的RESTful服务。 超媒体:REST的秘密要素

在这篇文章中&#xff0c;我们将介绍有关HATEOAS的RESTful服务的综合文章。 超媒体是REST的秘密成分。 1.简介 在本教程的前一部分中&#xff0c;我们花了一些时间来刷新有关REST体系结构样式的基本原理的知识。 业界对REST状态的批判性眼光揭示了一个令人失望的事实&#xf…

springboot 单测加入参数_Spring Boot集成Elasticsearch实战分享

作者|java梦想口服液|简书最近有读者问我能不能写下如何使用 Spring Boot 开发 Elasticsearch(以下简称 ES) 相关应用&#xff0c;今天就讲解下如何使用 Spring Boot 结合 ES。可以在 ES 官方文档中发现&#xff0c;ES 为 Java REST Client 提供了两种方式的 Client&#xff1a…

计算机主机安装系统安装系统安装软件,电脑安装软件时提示安装过程出错系统设置未被修改怎么办...

‍电脑安装软件&#xff0c;尤其是安全管理这一类软件&#xff0c;可能会出现安装失败的情况&#xff0c;提示安装过程出现错误&#xff0c;未修改系统设置等。这是怎么回事?这些软件在安装的时候可能会修改系统相关的核心设置&#xff0c;所以电脑系统会阻止其安装。下面让我…

python一个函数调用另一个函数_在Python中将函数作为另一个函数的参数传入并调用的方法...

在Python中&#xff0c;函数本身也是对象&#xff0c;所以可以将函数作为参数传入另一函数并进行调用 在旧版本中&#xff0c;可以使用apply(function, *args, **kwargs)进行调用&#xff0c;但是在新版本中已经移除&#xff0c;以function(*args, **kwargs)进行替代&#xff0…

ps图片拖不进去_PS教学:你的logo还不够高大上?7步教做出黄色金属质感logo

今天美迪君向大家分享一下&#xff0c;如何用ps简单制作带有黄色金属质感的logo方法&#xff0c;难度不仅不大&#xff0c;且制造出来的logo也是非常漂亮&#xff0c;值得大家学习。接下来就为大家演示一下制造的方法。1、打开PS&#xff0c;CtrlN新建一个1920*1080的画布(根据…

简单比对照片是否相同_小新说法 | 如何认定商标是否侵权?

如何认定商标是否侵权&#xff1f;原创 | 高姗 江苏东能律师事务所商标是商品的生产者、经营者在其生产、制造、加工、拣选或者经销的商品上或者服务的提供者在其提供的服务上采用的&#xff0c;用于区别商品或服务来源的&#xff0c;包括文字、图形、字母、数字、三维标志、颜…

验证码编写_编写干净的测试–验证或不验证

验证码编写在编写使用模拟对象的单元测试时&#xff0c;请遵循以下步骤&#xff1a; 配置我们的模拟对象的行为。 调用测试的方法。 验证是否已调用模拟对象的正确方法。 第三步的描述实际上有点误导&#xff0c;因为通常我们最终会验证是否调用了正确的方法以及未调用模拟…

单片机拼字程序怎么做_家装行业做小程序怎么样?

对于家装行业&#xff0c;给大家提到了很多获客引流的方式&#xff0c;无论是线上还是线下&#xff0c;只要坚持去做&#xff0c;最后肯定会取得成果的。关于线下的给大家提到最多的就是合作共赢的模式来拓客&#xff0c;线上主要就是打电话和表单或者进入平台的形式&#xff0…

计算机三级考试网络技术怎么复习,考前数天如何突破性通过计算机等级考试之三级网络技术篇...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼计算机等级考试只有几天的时间了&#xff0c;复习已久的你现在该做些什么?最新出版的书&#xff0c;结合近年等考真题&#xff0c;考三级网络技术的同学需要的可以看看&#xff0c;我找来了目录和内容简介&#xff0c;不错的一本书…

python 删除csv第一行_python 标准库学习之 csv

本文由作者 凭海临风 授权刊登。原文地址&#xff1a;https://jeffsui.github.io/2020/01/02/python-standard-library-csv/文档路径官方文档&#xff1a;https://docs.python.org/zh-cn/3.8/library/csv.htmlCSV 文件格式文件扩展名为.csv&#xff0c;通用的电子表格文件格式&…

Java 8之前和之后的Lambda表达式

Java 8之前和之后的几个示例程序的快速指南。Java8 Concepts进一步简化了代码&#xff0c;并且对核心逻辑&#xff08;而不是语法&#xff09;产生了深远影响。 1.简介 在本教程中&#xff0c;我们将学习如何使用Java 8编写程序 lambda和Stream概念以及示例。 许多开发人员认…

idea java主题_IDEA变身超级形态,需要这个酷炫主题

码个蛋(codeegg) 第 1090 次推文作者&#xff1a;CodeWhite7链接&#xff1a;https://blog.csdn.net/weixin_46146269/article/details/104793277前言IDEA&#xff0c;全称 IntelliJ IDEA &#xff0c;是 Java 语言的集成开发环境&#xff0c; IDEA 在业界被公认为是最好的 jav…

儿童python编程能给孩子带来哪些好处_python编程入门学习对孩子成长有哪些优势?...

python编程语言学习有意义吗&#xff1f; python编程语言是少儿编程培训课程中重要的组成部分&#xff0c;随着越来越多的孩子开始接触和学习编程&#xff0c;通过编程学习培养孩子良好的学习习惯和锻炼提升孩子逻辑思维能力。在python编程培训班学习过程中&#xff0c;通过pyt…