什么是装饰器

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

装饰器的原则: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. field-symbols: <ATTR> type ANY.

    field-symbols: type ANY. * importing iv_root_list type refer to if_genil_cont_root_objectlist DATA l ...

  2. 删除docker registry镜像脚本

    使用: 删除指定镜像:/usr/local/bin/delete_docker_registry_image -i 镜像名 删除指定镜像指定标签:/usr/local/bin/delete_docke ...

  3. 使用Python自带difflib模块进行文件内容差异对比

    difflib_text.py #!/usr/bin/python import difflib import sys try: textfile1=sys.argv[1] textfile2=sys ...

  4. 【LeetCode每天一题】Median of Two Sorted Arrays(两数组中的中位数)

    There are two sorted arrays nums1 and nums2 of size m and n respectively.  Find the median of the tw ...

  5. char varchar

    对于字符类型的有:char:固定长度,存储ANSI字符,不足的补英文半角空格.nchar:固定长度,存储Unicode字符,不足的补英文半角空格varchar:可变长度,存储ANSI字符,根据数据长度 ...

  6. [LeetCode] 860. Lemonade Change_Easy tag: Greedy

    At a lemonade stand, each lemonade costs $5. Customers are standing in a queue to buy from you, and ...

  7. MSSqlServer 主从同步复制原理(发布/订阅)

    基本模型 1.发布类型: 快照发布:用于为事务复制和合并复制提供初始数据集:在适合数据完全刷新时也可以使用快照复制.利用这三种复制,SQL Server 提供功能强大且灵活的系统,以便使企业范围内的数 ...

  8. Python基础(三)Mysql数据库安装及使用

    在python下使用mysql需要: 1.安装mysql 2.安装python  pymysql包(pymysql包支持py3 跟mysqldb用法差不多) 一.安装mysql mysql下载地址:h ...

  9. Selenium基础知识(六)下拉列表定位

    1.下拉列表定位 要选择下拉列表中的元素,要先定位到,下拉列表元素,然后可以通过xpath去点击,表内内容 例如,百度搜索-->百度设置-->搜索设置-->选择下拉列表框内" ...

  10. C++ new运算符

    new 分配的数据类型:内置数据类型.自定义数据类型. 如果不成功,则 new 将返回零或引发异常:编写自定义异常处理例程并调用 _set_new_handler运行库函数(以您的函数名称作为其参数) ...