什么是装饰器

装饰器本身就是函数,并且为其他函数添加附加功能

装饰器的原则:1.不修改被装饰对象的源代码  2.不修改被装饰对象的调用方式
装饰器=高阶函数+函数嵌套+闭包

# res=timmer(test)  #返回的是wrapper的地址 # res()  #执行的是wrapper()

# test=timmer(test)  #返回的是wrapper的地址 # test()  #执行的是wrapper()

#  @timmer  就相当于 test=timmer(test)

# #搭一个高阶函数与函数嵌套的框架
# def timmer(func):
# def wrapper():
# print(func)
# func()
# return wrapper
import time
def timmer(func):
def wrapper():
start_time=time.time()
# print(func)
res=func()#由于执行新获得的test,所以执行wrapper,func作为局部变量,当前没有,便往上一层去找,即test,运行test
stop_time = time.time()
print('运行时间是%s' %(stop_time -start_time))
#wrapper里没有返回值,所以不管怎么改变test,返回值都是none
return res#由于func运行的就是test,所以将func的值赋给res,再返回res就是test的返回值
return wrapper
@timmer#相当于test = timmer(test)#把test函数作为参数传给timmer,执行timmer获取到返回值wrapper,并将其赋给test
def test():
time.sleep(3)
print('test运行完毕')
return '这是test的返回值' test()#执行新的test,实际就是执行wrapper,这是为了不改变test的调用方式

Python进阶【第九篇】装饰器的更多相关文章

  1. Python进阶之decorator装饰器

    decorator装饰器 .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans GB&quo ...

  2. Python 进阶_闭包 & 装饰器

    目录 目录 闭包 函数的实质和属性 闭包有什么好处 小结 装饰器 更加深入的看看装饰器的执行过程 带参数的装饰器 装饰器的叠加 小结 装饰器能解决什么问题 小结 闭包 Closure: 如果内层函数引 ...

  3. Python进阶-III 函数装饰器(Wrapper)

    1.引入场景: 检查代码的运行时间 import time def func(): start = time.time() time.sleep(0.12) print('看看我运行了多长时间!') ...

  4. Python入门篇-装饰器

    Python入门篇-装饰器 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.装饰器概述 装饰器(无参) 它是一个函数 函数作为它的形参 返回值也是一个函数 可以使用@functi ...

  5. Python中利用函数装饰器实现备忘功能

    Python中利用函数装饰器实现备忘功能 这篇文章主要介绍了Python中利用函数装饰器实现备忘功能,同时还降到了利用装饰器来检查函数的递归.确保参数传递的正确,需要的朋友可以参考下   " ...

  6. python函数与方法装饰器

    之前用python简单写了一下斐波那契数列的递归实现(如下),发现运行速度很慢. def fib_direct(n): assert n > 0, 'invalid n' if n < 3 ...

  7. Python 入门之 Python三大器 之 装饰器

    Python 入门之 Python三大器 之 装饰器 1.开放封闭原则: (1)代码扩展进行开放 ​ 任何一个程序,不可能在设计之初就已经想好了所有的功能并且未来不做任何更新和修改.所以我们必须允许代 ...

  8. python语法基础-函数-装饰器-长期维护

    ######################################################### # 装饰器 # 装饰器非常重要,面试Python的公司必问, # 原则:开放封闭原则 ...

  9. guxh的python笔记三:装饰器

    1,函数作用域 这种情况可以顺利执行: total = 0 def run(): print(total) 这种情况会报错: total = 0 def run(): print(total) tot ...

  10. python设计模式之内置装饰器使用(四)

    前言 python内部有许多内建装饰器,它们都有特别的功能,下面对其归纳一下. 系列文章 python设计模式之单例模式(一) python设计模式之常用创建模式总结(二) python设计模式之装饰 ...

随机推荐

  1. springmvc aop 事务配置

    对应的中文: 任意公共方法的执行: execution(public * *(..)) 任何一个以“set”开始的方法的执行: execution(* set*(..)) AccountService ...

  2. abap中结构体嵌套结构体。

    1: 结构体中嵌套结构体. *&---------------------------------------------------------------------* *& Re ...

  3. openshift node资源限制

    在oc的node配置文件中添加 ...... kubeletArguments: cgroups-per-qos: - "true" cgroup-driver: - " ...

  4. 【LeetCode每天一题】4Sum(4数之和)

    Given an array nums of n integers and an integer target, are there elements a, b, c, and d in nums s ...

  5. JSPatch解析

    defineClass('JPViewController', { handleBtn: function(sender) { var tableViewCtrl = JPTableViewContr ...

  6. .NET拾忆:FileSystemWatcher 文件监控

    资源: https://msdn.microsoft.com/zh-cn/library/system.io.filesystemwatcher_properties(v=vs.110).aspx F ...

  7. python filter函数应用,过滤字符串

    >>> candidate = 'dade142.;!0142f[.,]ad' >>> filter(str.isdigit, candidate) #保留数字 ' ...

  8. OEMCC13.2 添加监控目标

    1.需求描述 2.添加数据库目标 2.1 部署AGENT   2.1.1 直接安装方式   2.1.2 离线安装方式   2.1.3 命令行安装方式 2.2 添加集群资源 2.3 添加数据库 3.添加 ...

  9. VB脚本错误,系统找不到制定的文件 。代码:80070002

    希望得到网友的答案:非常感谢!

  10. gitlab覆盖率

    https://danny50610.blogspot.com/2017/09/gitlab-ci-phpunit-coverage.html