博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
带有参数的装饰器
阅读量:4652 次
发布时间:2019-06-09

本文共 928 字,大约阅读时间需要 3 分钟。

#带有参数的装饰器 import time def deco(func):     def wrapper(a,b):         startTime = time.time()         func(a,b)         endTime = time.time()         msecs = (endTime - startTime)*1000         print("time is %d ms" %msecs)     return wrapper @deco def func(a,b):     print("hello,here is a func for add :")     time.sleep(1)     print("result is %d" %(a+b)) if __name__ == '__main__':     f = func     f(3,4) 不明白为啥在做函数调用的时候f(3,4),要回到
wrapper(a,b)函数的这一句执行:
startTime = time.time() 原因来了:当
@deco这一句被解释器检测到的时候,开始执行装饰器(函数)deco(func),传进去的参数是func()函数在 内存中的地址,返回的也是func()函数在内存中的地址,return wrapper相当于把func()函数在内存中 的地址返回给被装饰过的func()函数,让wrapper指向被装饰器装饰过的func()函数在内存中的地址,这样 的结局是wrapper()函数就相当于是被装饰了的func()函数了。总体而言,装饰器的作用相当于对func ()函数的地址重新赋值,并让内部的wrapper()函数指向这个地址。而wrapper()函数内部的func() 函数等于原来的(被装饰前的)那个func()函数。wrapper()函数也就是新func()函数包含了旧func() 函数和其他一些附加的东西。
装饰器存在的作用就是给函数已经存在的功能再扩展新的功能。

转载于:https://www.cnblogs.com/yibeimingyue/p/9318300.html

你可能感兴趣的文章
前端之html
查看>>
extjs gridpanel滚动条问题显示数据不完整
查看>>
编写WebService 并发布到IIS中
查看>>
C语言 · 报时助手
查看>>
ACM C++
查看>>
项目部署
查看>>
【经验】CS
查看>>
多线程下载实例
查看>>
Oracle redo undo
查看>>
[转] Ubuntu安装Fcitx以及Fcitx输入中文不显示候选词框的解决办法
查看>>
多表单提交
查看>>
在linux平台实现atosl
查看>>
软件质量属性的场景描述
查看>>
数据格式化
查看>>
Linux的常用用法
查看>>
JAVA事务系列一:事务基本概念
查看>>
12月5日站立会议
查看>>
SQL 语法学习
查看>>
嗯---NOI水题集合之:阿狸的打字机
查看>>
WPF拖动DataGrid滚动条时内容混乱的解决方法
查看>>