Python装饰器的进阶
带参数的装饰器
示例一:Python自带的装饰器函数
from functools import wraps
import time
def Time(func1):
@wraps(func1)
def Wrapper(*args,**kwargs):
start = time.time()
ret = func1(args)
end = time.time()
print(end - start)
return ret
return Wrapper def func1(day):
time.sleep(0.5)
'''好嗨呦'''
print('放假%s天'%day)
return '好开心' func1 = Time(func1)
ret = func1(10)
print(func1.__name__)
# 打印函数的名字
print(func1.__doc__)
# 打印函数中注释部分内容;不过我用的python 3.5 ,__doc__这个内置函数好像并未生效,老男孩的代码也没有生效,下次注意研究
示例二:装饰器带参数的使用(三层嵌套)
import time
Conditions = True
# 在已经写好的装饰器中要对装饰器做参数判断,可以使用三层嵌套来完成,在嵌套外部定义一个判断值;这样就不用改动后续代码,只需要改动判断值即可;
def Time_out(Conditions):
def Time(func1):
def inner(*args,**kwargs):
if Conditions:
start = time.time()
ret = func1(*args,**kwargs)
end = time.time()
print(end - start)
return ret
else:
ret = func1(*args,**kwargs)
return ret
return inner
return Time
Time = Time_out(Conditions) @Time
def fun1():
time.sleep(0.5)
print('func1') @Time
def fun2():
print('func2')
time.sleep(0.5)
fun1()
fun2()
多个装饰器装饰一个函数
def wrapper1(func):
def inner1():
print('wrapper1 ,before func')
ret = func()
print('wrapper1 ,after func')
return ret
return inner1 def wrapper2(func):
def inner2():
print('wrapper2 ,before func')
ret = func()
print('wrapper2 ,after func')
return ret
return inner2 def wrapper3(func):
def inner3():
print('wrapper3 ,before func')
ret = func()
print('wrapper3 ,after func')
return ret
return inner3 @wrapper3
@wrapper2
@wrapper1
def f():
print('in f')
return '哈哈哈' print(f())
注意事项
- @装饰器名称,装饰器名称会被当成执行内容先执行,'@装饰器'这个东西要查分成两部分看
- 一定要记住装饰器的在执行过程中的先后顺序
Python装饰器的进阶的更多相关文章
- Python 装饰器(进阶篇)
装饰器是什么呢? 我们先来打一个比方,我写了一个python的插件,提供给用户使用,但是在使用的过程中我添加了一些功能,可是又不希望用户改变调用的方式,那么该怎么办呢? 这个时候就用到了装饰器.装饰器 ...
- (转)python装饰器进阶一
Python装饰器进阶之一 先看例子 网上有很多装饰器的文章,上来说半天也没让人看明白装饰器到底是个什么,究竟有什么用,我们直接来看几个例子. Python递归求斐波那契数列 def fibonacc ...
- (转)python装饰器二
Python装饰器进阶之二 保存被装饰方法的元数据 什么是方法的元数据 举个栗子 def hello(): print('Hello, World.') print(dir(hello)) 结果如下: ...
- 五分钟学会Python装饰器,看完面试不再慌
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Python专题的第12篇文章,我们来看看Python装饰器. 一段囧事 差不多五年前面试的时候,我就领教过它的重要性.那时候我Pyt ...
- Python 装饰器填坑指南 | 最常见的报错信息、原因和解决方案
本文为霍格沃兹测试学院学员学习笔记. Python 装饰器简介 装饰器(Decorator)是 Python 非常实用的一个语法糖功能.装饰器本质是一种返回值也是函数的函数,可以称之为“函数的函数”. ...
- 关于python装饰器
关于python装饰器,不是系统的介绍,只是说一下某些问题 1 首先了解变量作用于非常重要 2 其次要了解闭包 def logger(func): def inner(*args, **kwargs) ...
- python装饰器通俗易懂的解释!
1.python装饰器 刚刚接触python的装饰器,简直懵逼了,直接不懂什么意思啊有木有,自己都忘了走了多少遍Debug,查了多少遍资料,猜有点点开始明白了.总结了一下解释得比较好的,通俗易懂的来说 ...
- Python 装饰器学习
Python装饰器学习(九步入门) 这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 1 2 3 4 5 6 7 8 # -*- c ...
- python 装饰器修改调整函数参数
简单记录一下利用python装饰器来调整函数的方法.现在有个需求:参数line范围为1-16,要求把9-16的范围转化为1-8,即9对应1,10对应2,...,16对应8. 下面是例子: def fo ...
随机推荐
- 三机互ping(自己总结)
主机与虚拟机互ping设置: 点击VMware下的[编辑]--[虚拟网络编辑器]设置如下: 屏幕剪辑的捕获时间: 2016/5/21 13:10 屏幕剪辑的捕获时间: ...
- 给Integer对象加锁的错误方式
package com.thread.test; public class BadLockOnInteger implements Runnable { public static Integer i ...
- 通过BulkLoad快速将海量数据导入到Hbase
在第一次建立Hbase表的时候,我们可能需要往里面一次性导入大量的初始化数据.我们很自然地想到将数据一条条插入到Hbase中,或者通过MR方式等. 但是这些方式不是慢就是在导入的过程的占用Region ...
- Node+express实现后台服务接口
一.准备工作 创建代码目录,依次执行以下操作 1.(若没有安装过)安装node 2.npm init(package.json) 3.安装express(请求)npm install express ...
- web框架开发-Django的Forms组件
校验字段功能 针对一个实例:用户注册. 模型:models.py class UserInfo(models.Model): name=models.CharField(max_length=32) ...
- (十一)Updating Documents
In addition to being able to index and replace documents, we can also update documents. Note though ...
- mongodb安装4.0(rpm)
虚拟机客户端vmware player linux版本:CentOS Linux release 7.4.1708 (Core) CentOS安装类型:Basic Web Server 参照官网最新文 ...
- root用户无法访问Mysql数据库问题的解决
在使用Centos系统远程访问Mysql数据库的时候,系统提示报如下错误: Access Denied for User 'root'@'localhost' (using password: YES ...
- Daily Scrum 12.20
Member Task on 12.20 Task on 12.21 仇栋民 继续Task972 : 完成活动评分基础功能 完成Task972 : 完成活动评分基础功能 康家华 完成 Task1010 ...
- U盘安装CentOS系统、raid5制作以及nohup的使用
最近折腾服务器,用U盘安装了系统,总结了一些避坑措施: 下载UltraISO工具,用来刻盘 从centos官网下载ISO镜像,然后刻盘 关键是在你进入系统安装界面后,如下: 选中第一项,按tab键(看 ...