带参数的装饰器

示例一: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装饰器的进阶的更多相关文章

  1. Python 装饰器(进阶篇)

    装饰器是什么呢? 我们先来打一个比方,我写了一个python的插件,提供给用户使用,但是在使用的过程中我添加了一些功能,可是又不希望用户改变调用的方式,那么该怎么办呢? 这个时候就用到了装饰器.装饰器 ...

  2. (转)python装饰器进阶一

    Python装饰器进阶之一 先看例子 网上有很多装饰器的文章,上来说半天也没让人看明白装饰器到底是个什么,究竟有什么用,我们直接来看几个例子. Python递归求斐波那契数列 def fibonacc ...

  3. (转)python装饰器二

    Python装饰器进阶之二 保存被装饰方法的元数据 什么是方法的元数据 举个栗子 def hello(): print('Hello, World.') print(dir(hello)) 结果如下: ...

  4. 五分钟学会Python装饰器,看完面试不再慌

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Python专题的第12篇文章,我们来看看Python装饰器. 一段囧事 差不多五年前面试的时候,我就领教过它的重要性.那时候我Pyt ...

  5. Python 装饰器填坑指南 | 最常见的报错信息、原因和解决方案

    本文为霍格沃兹测试学院学员学习笔记. Python 装饰器简介 装饰器(Decorator)是 Python 非常实用的一个语法糖功能.装饰器本质是一种返回值也是函数的函数,可以称之为“函数的函数”. ...

  6. 关于python装饰器

    关于python装饰器,不是系统的介绍,只是说一下某些问题 1 首先了解变量作用于非常重要 2 其次要了解闭包 def logger(func): def inner(*args, **kwargs) ...

  7. python装饰器通俗易懂的解释!

    1.python装饰器 刚刚接触python的装饰器,简直懵逼了,直接不懂什么意思啊有木有,自己都忘了走了多少遍Debug,查了多少遍资料,猜有点点开始明白了.总结了一下解释得比较好的,通俗易懂的来说 ...

  8. Python 装饰器学习

    Python装饰器学习(九步入门)   这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 1 2 3 4 5 6 7 8 # -*- c ...

  9. python 装饰器修改调整函数参数

    简单记录一下利用python装饰器来调整函数的方法.现在有个需求:参数line范围为1-16,要求把9-16的范围转化为1-8,即9对应1,10对应2,...,16对应8. 下面是例子: def fo ...

随机推荐

  1. SQL语句中不同的连接JOIN

    为了从两个表中获取数据,我们有时会用JOIN将两个表连接起来.通常有以下几种连接方式: JOIN  or  INNER JOIN(内连接) : 这两个是相同的,要求两边表同时有对应的数据,返回行,任何 ...

  2. 【记录】Xmind8 Pro 激活

    摘要 XMind 是一个全功能的思维导图和头脑风暴软件,为激发灵感和创意而生.作为一款有效提升工作和生活效率的生产力工具,受到全球百千万用户的青睐. [有能力请支持正版]     在xmin下载xmi ...

  3. IDEWorkspaceChecks.plist文件是干什么用的?

    在提交PR的时候,无意间发现了在xcworkspace/xcshareddata中多了一个名为IDEWorkspaceChecks.plist的文件.自己并没有手动创建此文件,在网上查了一下,最终对其 ...

  4. MySQL 索引创建及使用

    索引的类型 PRIMARY KEY(主键索引):   用来标识唯一性,数据不可重复 ,主键列不能为NULL,并且每个表中有且只能有一个主键,还可以创建复合主键,即多个字段组合起来. 创建语句为: -- ...

  5. python 词云学习

    词云入门 三步曲 数据获取:使用爬虫在相关网站上获取文本内容 数据清洗:按一定格式对文本数据进行清洗和提取(文本分类,贴标签) 数据呈现:多维度呈现和解读数据(计算,做表,画图) 一 模块的安装 pi ...

  6. 【English EMail】Compensation Planning Memo

    Data Foundation  数据基础 [faʊnˈdeʃən] Interesting newsletter for data foundation practice. Annual Code ...

  7. flink如何动态支持依赖jar包提交

    通常我们在编写一个flink的作业的时候,肯定会有依赖的jar包.flink官方希望你将所有的依赖和业务逻辑打成一个fat jar,这样方便提交,因为flink认为你应该对自己的业务逻辑做好单元测试, ...

  8. AI 生成式对抗网络(GAN)

    生成式对抗网络(Generative Adversarial Network,简称GAN),主要由两部分构成:生成模型G和判别模型D.训练GAN就是两种模型的对抗过程. 生成模型:利用任意噪音(ran ...

  9. vs2017创建.net core 应用程序,发布到Linux

    1.打开vs2017,创建.net core 应用程序 压缩上传到linux

  10. oracle实例安装到 4% 不能继续安装

    较为悲催的问题, 一直不知道如何解决: 偶尔听到群里的大神提起: 今天特地拿出来分享一下: 希望大家碰到能早点解决 是CPU问题: 将cpu 核心数 改为 2的指数倍: 或者将cpu打上补丁就好了: ...