python :编写装饰器
简单装饰器
def log_time(func): # 此函数的作用时接受被修饰的函数的引用test,然后被内部函数使用def make_decorater():print('现在开始装饰')func()print('现在结束装饰')return make_decorater # log_time()被调用后,运行此函数返回make_decorater()函数的引用make_decorater@log_time # 此行代码等同于,test=log_time(test)=make_decorater def test():print('我是被装饰的函数') test() # test()=make_decorater() 调试结果 D:\pycharm_project\装饰器\venv\Scripts\python.exe D:/pycharm_project/装饰器/venv/装饰器.py 现在开始装饰 我是被装饰的函数 现在结束装饰Process finished with exit code 0
带参的
形参
def log_time(func):def make_decorater(*args,**kwargs): # 接受调用语句的实参,在下面传递给被装饰函数(原函数)print('现在开始装饰')test_func = func(*args,**kwargs) # 如果在这里return,则下面的代码无法执行,所以引用并在下面返回print('现在结束装饰')return test_func # 因为被装饰函数里有return,所以需要给调用语句(test(2))一个返回,又因为test_func = func(*args,**kwargs)已经调用了被装饰函数,这里就不用带()调用了,区别在于运行顺序的不同。return make_decorater@log_time def test(num):print('我是被装饰的函数')return num+1a = test(2) # test(2)=make_decorater(2) print(a)
传入注解的参数注意!有两个return,log_time函数也要return
def get_parameter(*args,**kwargs): # 工厂函数,用来接受@get_parameter('index.html/')的'index.html/'def log_time(func):def make_decorater():print(args,kwargs)print('现在开始装饰')func()print('现在结束装饰')return make_decoraterreturn log_time @get_parameter('index.html/') def test():print('我是被装饰的函数')# return num+1test() # test()=make_decorater() D:\pycharm_project\装饰器\venv\Scripts\python.exe D:/pycharm_project/装饰器/venv/装饰器.py ('index.html/',) {} 现在开始装饰 我是被装饰的函数 现在结束装饰Process finished with exit code 0
装饰器:在不修改函数源代码的基础上,添加函数功能
一个简单的装饰器
1
2
3
4
5
6
7
8
9
10
11
|
def log_time(func): # 此函数的作用时接受被修饰的函数的引用test,然后被内部函数使用
def make_decorater():
print ( '现在开始装饰' )
func()
print ( '现在结束装饰' )
return make_decorater # log_time()被调用后,运行此函数返回make_decorater()函数的引用make_decorater
@log_time # 此行代码等同于,test=log_time(test)=make_decorater
def test():
print ( '我是被装饰的函数' )
test() # test()=make_decorater()
|
1
2
3
4
5
6
|
D:\pycharm_project\装饰器\venv\Scripts\python.exe D: / pycharm_project / 装饰器 / venv / 装饰器.py
现在开始装饰
我是被装饰的函数
现在结束装饰
Process finished with exit code 0
|
当被装饰的函数有形参时
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
def log_time(func):
def make_decorater( * args, * * kwargs): # 接受调用语句的实参,在下面传递给被装饰函数(原函数)
print ( '现在开始装饰' )
test_func = func( * args, * * kwargs) # 如果在这里return,则下面的代码无法执行,所以引用并在下面返回
print ( '现在结束装饰' )
return test_func # 因为被装饰函数里有return,所以需要给调用语句(test(2))一个返回,又因为test_func = func(*args,**kwargs)已经调用了被装饰函数,这里就不用带()调用了,区别在于运行顺序的不同。
return make_decorater
@log_time
def test(num):
print ( '我是被装饰的函数' )
return num + 1
a = test( 2 ) # test(2)=make_decorater(2)
print (a)
|
1
2
3
4
5
6
7
|
D:\pycharm_project\装饰器\venv\Scripts\python.exe D: / pycharm_project / 装饰器 / venv / 装饰器.py
现在开始装饰
我是被装饰的函数
现在结束装饰
3
Process finished with exit code 0
|
当@装饰器后有参数时
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
def get_parameter( * args, * * kwargs): # 工厂函数,用来接受@get_parameter('index.html/')的'index.html/'
def log_time(func):
def make_decorater():
print (args,kwargs)
print ( '现在开始装饰' )
func()
print ( '现在结束装饰' )
return make_decorater
return log_time
@get_parameter ( 'index.html/' )
def test():
print ( '我是被装饰的函数' )
# return num+1
test() # test()=make_decorater()
|
1
2
3
4
5
6
7
|
D:\pycharm_project\装饰器\venv\Scripts\python.exe D: / pycharm_project / 装饰器 / venv / 装饰器.py
( 'index.html/' ,) {}
现在开始装饰
我是被装饰的函数
现在结束装饰
Process finished with exit code 0
|
转载于:https://www.cnblogs.com/daysn/p/10796469.html
python :编写装饰器相关推荐
- python编写装饰器_写python中的装饰器
python中的装饰器主要用于在已有函数实现功能前附加需要输出的信息,下面将用实例展示我如何写装饰器. 首先分别尝试写装饰器装饰一个无参函数和一个有参函数(被装饰函数仅输出,无返回值情况下) 1 de ...
- python编写装饰器_我也来写一下python装饰器
有借用,但原文出处已经找不到了,根据笔记分享一下解释器的基础. 下面的代码表示,等待两秒钟,输出'test is running'. 现在要求增加统计程序运行时间的功能. 等待两秒钟,输出'test ...
- Python之装饰器
Python之装饰器 在不修改函数调用方式的前提下,也不能修改函数内部源代码!!!! 例如: 在每个季度公司发绩效,统计每个人的代码执行效率.咱们总不能是每个函数里加time模块吧. import t ...
- Python设计模式-装饰器模式
Python设计模式-装饰器模式 代码基于3.5.2,代码如下; #coding:utf-8 #装饰器模式class Beverage():name = ""price = 0.0 ...
- python中装饰器的作用_Python装饰器详解,详细介绍它的应用场景
装饰器的应用场景附加功能 数据的清理或添加:函数参数类型验证 @require_ints 类似请求前拦截数据格式转换 将函数返回字典改为 JSON/YAML 类似响应后篡改为函数提供额外的数据 moc ...
- python装饰器函数-Python精进-装饰器与函数对象
本文为<爬着学Python>系列第四篇文章. 从本篇开始,本专栏在顺序更新的基础上,会有不规则的更新. 在Python的学习与运用中,我们迟早会遇到装饰器,这个概念对于初识装饰器的新手来说 ...
- python类装饰器详解-Python类装饰器实现方法详解
本文实例讲述了Python类装饰器.分享给大家供大家参考,具体如下: 编写类装饰器 类装饰器类似于函数装饰器的概念,但它应用于类,它们可以用于管理类自身,或者用来拦截实例创建调用以管理实例. 单体类 ...
- python装饰器-Python @函数装饰器及用法(超级详细)
前面章节中,我们已经讲解了 Python 内置的 3 种函数装饰器,分别是 @staticmethod.@classmethod 和 @property,其中 staticmethod().class ...
- python装饰器原理-Python函数装饰器原理与用法详解
本文实例讲述了Python函数装饰器原理与用法.分享给大家供大家参考,具体如下: 装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值 ...
- Python 函数装饰器
装饰器(Decorators)是 Python 的一个重要部分.简单地说:他们是修改其他函数的功能的函数.他们有助于让我们的代码更简短,也更Pythonic(Python范儿).大多数初学者不知道在哪 ...
最新文章
- 正则表达式实现将html文本转换为纯文本格式(将html字符串转换为纯文本方法)
- python循环数组判断,python的数据类型、数组、条件判断、循环的基础知识
- 撩妹学会这一招,就没有人能拒绝你!
- ubuntu ifconfig只有lo没有ens33的问题
- zookeeper下载安装过程
- linux有许多sed进程,Linux进程与性能监控
- 拓端tecdat|R语言用多重插补法估算相对风险
- Atitit 界面接口技术 cli gui nui cui管理 attilax总结 1. NUI	1 1.1. 问:什么是“自然用户界面”?	1 2. Cli到gui到nui CUI	2 2.1.
- 计算机地图制图的点状符号制作,计算机地图制图地图符号库系统建立..doc
- MOOC-首都师范-博弈论-焦宝聪-第六章-动态博弈学习笔记(五)
- 前世回眸,今生结缘,滚滚红尘,谁人可依
- 微信小程序开发笔记 进阶篇⑤——getPhoneNumber 获取用户手机号码(基础库 2.21.2 之前)
- python+selenium自动登录163邮箱代码提示错误解决方案(如:NoSuchFrameException: Message: no such frame)
- MySQL通过命令导入导出数据
- 第05章 深度卷积神经网络模型
- 小程序毕设作品之微信美食菜谱小程序毕业设计成品(3)后台功能
- csgo服务器响应参数,csgo必备弹道参数 影响弹道参数设置
- brpc搭建、编译和使用
- hugetable和mysql区别_BigData-MySQL总结大全(一)苏暖人
- 服务器电源ic芯片,AC-DC适配器电源IC芯片方案选型表
热门文章
- django css,Django表单中的CSS样式
- python黑帽编程视频_Python黑帽编程 3.4 跨越VLAN详解
- 开发对接微信卡包会员卡_产品||AI刷脸会员+电子会员卡
- CentOS7 修改静态IP
- 构建第一个Spring Boot2.0应用之集成dubbo上---环境搭建(九)
- 阿里云云盾 · 云防火墙技术解读:零配置业务自动分组,安全管理有序、可见...
- 如何反编译.apk(注:CSDN上提供的资源过时了,都用不了)
- 《Nmap渗透测试指南》—第6章6.6节源端口欺骗
- 【转】XCode环境变量及路径设置 -- 待学习
- math.floor实现四舍五入