首页 > 编程语言 >Python 函数装饰器

Python 函数装饰器

时间:2022-10-08 21:06:00浏览次数:47  
标签:return 函数 Python wrappedFunc tsfunc func foo 装饰


from time import ctime,sleep


def tsfunc(func):
def wrappedFunc(a):
print '[%s] %s() called, a= %s ' % (ctime(), func.__name__, a)

return func()



return wrappedFunc

@tsfunc
def foo():
print "doci daci"


foo(3)
sleep(2)
foo(4)

函数装饰器,就是修饰,修改一个函数,有点像AOP编程。

首先foo是一个函数 。

其实tsfunc也是另一个函数,
使用@符号时候,就相当于是调用了tsfunc 这个函数,同时参数就是foo。

可以看到tsfunc接受一个参数。
它的目的,是生成另一个函数。在tsfunc内部,名字叫wrappedFunc, 它返回了wrappedFunc。

所以应该定义wrappedFunc。

其实,现在foo已经不是foo了,foo传进了tsfunc中,返回的是wrappedFunc。
相当于
foo=tsfunc(foo),
在之后,foo的使用者, 要使用foo的时候,要看着wrappedFunc的参数来使用了。

tsfunc就像是 函数熔炉。重炼了。

当装饰器有参数时,相当于,熔炉,首先要重炼。所以生成的函数就又多了一层。如下所示。

from time import ctime,sleep


def tsfunc(arg):
def ts_ts_func(func):
def wrappedFunc(a):
print '[%s] %s() called, a= %s, arg=%s ' % (ctime(), func.__name__, a, arg)

return func()



return wrappedFunc
return ts_ts_func

@tsfunc("123")
def foo():
print "doci daci"


foo(3)
sleep(2)
foo(4)

以前不理解装饰器, 慢慢练习写写,从简单,到复杂,慢慢就有感觉了。



标签:return,函数,Python,wrappedFunc,tsfunc,func,foo,装饰
From: https://blog.51cto.com/u_15815563/5738701

相关文章

  • Fortran 函数中单精度,双精度不匹配的错误
    错误实例01:programsubroutinereal*4arrarr=1.1callfun1(arr)endsubroutinefun1(arr)real*8arrwrite(*,*)arrend情况下主程序定义了......
  • Python核心编程
    Python内存管理对象自己有引用计数,计变量的数。引用计数增加,引用计数减少。del垃圾回收。obj==eval(repr(obj))内置函数cmp调用类的​​__cmp__​​方法类型的......
  • 网络字节序与主机字节序的转换函数实践
    1.什么是字节序?字节序是处理器架构特性,用于指示像整数这样的大数据类型内部的字节如何排序。简单来说,就是指超过一个字节的数据类型在内存中的存储的顺序。那么很明显,像......
  • python系列教程198——任意数目的参数
    声明:在人工智能技术教学期间,不少学生向我提一些python相关的问题,所以为了让同学们掌握更多扩展知识更好地理解AI技术,我让助理负责分享这套python系列教程,希望能帮到大家!由于......
  • numpy的一些常用函数
    importnumpyasnp1.np.prod(obj) 将对象中的所有元素相乘,返回2.np.minimum(a,b) 返回二者对应位置的最小值,可对矩阵进行广播3.np.pad(a,((0,0),(0,0)),mode......
  • 自动生成路由,action装饰器,登录接口,认证
    自动生成路由action装饰器的使用登录接口编写认证自动生成路由补充:  1.只要继承了ModelViewSet就要在路由中as_view()内添加字典的形式#path('book......
  • 函数式接口概述、作为方法的参数、作为方法的返回值及函数式接口Supplier介绍
    目录​​一、函数式接口概述​​​​二、函数式接口作为方法的参数​​​​三、函数式接口作为方法的返回值​​​​四、函数式接口Supplier​​​​五、Supplier接口练习:获......
  • Python numpy学习
    科学计算:PythonVS.MATLAB(3)—-线性代数基础​​​http://blog.sina.com.cn/s/blog_5f234d4701012p64.html​​......
  • python 解决安装mysqlClient失败
    运行django项目,因为我的代码需要mysqlClient,所以遇到问题记录一下直接运行安装命令pipinstall--usermysqlclient会报如下错误,查询一番之后发现只能安装wheel文件才能......
  • 学习Python之数据类型-1
    1、数字之运算(1)整数int#数字类型:整数inta=1b=2print(a+b)print(a-b)print(a*b)print(a/b)(2)小数float#数字类型:小数floata=1.0b=0.1print(a+b)print(a-b)p......