Python进阶【第九篇】装饰器
什么是装饰器
装饰器本身就是函数,并且为其他函数添加附加功能
装饰器的原则: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进阶【第九篇】装饰器的更多相关文章
- Python进阶之decorator装饰器
decorator装饰器 .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans GB&quo ...
- Python 进阶_闭包 & 装饰器
目录 目录 闭包 函数的实质和属性 闭包有什么好处 小结 装饰器 更加深入的看看装饰器的执行过程 带参数的装饰器 装饰器的叠加 小结 装饰器能解决什么问题 小结 闭包 Closure: 如果内层函数引 ...
- Python进阶-III 函数装饰器(Wrapper)
1.引入场景: 检查代码的运行时间 import time def func(): start = time.time() time.sleep(0.12) print('看看我运行了多长时间!') ...
- Python入门篇-装饰器
Python入门篇-装饰器 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.装饰器概述 装饰器(无参) 它是一个函数 函数作为它的形参 返回值也是一个函数 可以使用@functi ...
- Python中利用函数装饰器实现备忘功能
Python中利用函数装饰器实现备忘功能 这篇文章主要介绍了Python中利用函数装饰器实现备忘功能,同时还降到了利用装饰器来检查函数的递归.确保参数传递的正确,需要的朋友可以参考下 " ...
- python函数与方法装饰器
之前用python简单写了一下斐波那契数列的递归实现(如下),发现运行速度很慢. def fib_direct(n): assert n > 0, 'invalid n' if n < 3 ...
- Python 入门之 Python三大器 之 装饰器
Python 入门之 Python三大器 之 装饰器 1.开放封闭原则: (1)代码扩展进行开放 任何一个程序,不可能在设计之初就已经想好了所有的功能并且未来不做任何更新和修改.所以我们必须允许代 ...
- python语法基础-函数-装饰器-长期维护
######################################################### # 装饰器 # 装饰器非常重要,面试Python的公司必问, # 原则:开放封闭原则 ...
- guxh的python笔记三:装饰器
1,函数作用域 这种情况可以顺利执行: total = 0 def run(): print(total) 这种情况会报错: total = 0 def run(): print(total) tot ...
- python设计模式之内置装饰器使用(四)
前言 python内部有许多内建装饰器,它们都有特别的功能,下面对其归纳一下. 系列文章 python设计模式之单例模式(一) python设计模式之常用创建模式总结(二) python设计模式之装饰 ...
随机推荐
- solr创建业务域以及指定中文分析器IK
第一步:把中文分析器添加到工程中. 1.把IKAnalyzer2012FF_u1.jar添加到solr工程的lib目录下 2.把扩展词典.配置文件放到solr工程的WEB-INF/classes目录下 ...
- Git push remote rejected {change ### closed}
是因为和关掉的提交对应的Change_id一样导致的. 另一种可能是cherry-pick导致的: 之前提交的时候因为有merge,所以在gerrit服务器上审核的时候,我给abandoned了,因此 ...
- [LeetCode] 610. Triangle Judgement_Easy tag: SQL
A pupil Tim gets homework to identify whether three line segments could possibly form a triangle. Ho ...
- 产品设计教程:wireframe,prototype,mockup到底有何不同?
wireframe,prototype,mockup 三者经常被混用,很多人把三者都叫原型,真的是这样吗? 我们来看看三者到底有何不同.先来做一道选择题: 从这张图可以看出,prototype 和其他 ...
- flow ci的构建
自动构建遇到的问题. 1. Analyzing dependencies Pre-downloading: `WeiboSDK` from `https://github.com/sinaweibos ...
- Entity Framework Code First(Mysql)
1.添加NuGet包 引用NuGet包:EntityFramework6.1.3.MySql.Data.Entity6.9.8 2.修改配置 SqlServer配置: <add name=&qu ...
- cocos2d-x C++ iOS工程集成第三方支付宝支付功能
一.在支付宝开放平台下载支付宝SDK(https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.WWgVz8&tr ...
- can not create symbolic link HDFS解压自动配置lib报错。
如题,使用FusionInsight解压生成样例代码的时候报错,找不到解释.只猜测是权限问题.然后并没有仔细静心思考,心里杂念很多,很浮躁. 解决方法是“以管理员身份运行“. 想想高中:面对问题,不能 ...
- jQuery-二级导航
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- CSS border-radius边框圆角
在CSS3中提供了对边框进行圆角设定的支持,可对边框1~4个角进行圆角样式设置. 目录 1. 介绍 2. value值的格式和类型 3. border-radius 1~4个参数说明 4. 在线示例 ...