python装饰器的使用

2026-01-15 02:15:52

1、有一个场景就是我们执行某个方法的时候执行前加入执行时间那么我们就需要在方法执行的时候加入,一个方法可以,假如有很多都需要批量加入的时候,通常的方法就成了累赘

下面是普通的执行方法前

python装饰器的使用

2、我们可以写个简单的装饰器,避免每次掉用方法前,执行重复代码

import timedef log(func):

   def wrapper(*args, **kw):

       print 'start execution:%s' % time.strftime('%Y-%m-%d', time.localtime(time.time()))

       return func(*args, **kw)

   return wrapper

用法:只需要在你的方法前加入@log就好,如下图:

python装饰器的使用

3、那假如我们还想设置参数,来觉得类似于开关一样的功能又改怎么写呢

import time

def log(open=True):

   def decorator(func):

       def wrapper(*args, **kw):

           if open:

               print 'start execution:%s' % time.strftime('%Y-%m-%d', time.localtime(time.time()))

           return func(*args, **kw)

       return wrapper

   return decorator

用法如下,只需要在@log(加参数就好),用例如下图:

python装饰器的使用

4、装饰器其实就是你在每次执行方法的时候,自动替你加了一层,并且让你省略了你的写法,不改变原来写法,否则我们就需要log(func())嵌套使用,每个地方都改,太繁琐,才有了装饰器的概念,相当于原始的这种写法

python装饰器的使用

5、装饰器可以多个一起使用

import time

def log(open=True):

   def decorator(func):

       def wrapper(*args, **kw):

           if open:

               print 'start execution:%s' % time.strftime('%Y-%m-%d', time.localtime(time.time()))

           return func(*args, **kw)

       return wrapper

   return decorator

def log2(open=True):

   def decorator(func):

       def wrapper(*args, **kw):

           if open:

               print 'execution:%s' % time.strftime('%Y-%m-%d', time.localtime(time.time()))

           return func(*args, **kw)

       return wrapper

   return decorator

@log(True)

@log2(True)

def func():

   print 'hello world!!!'

func()

具体实现如下图:

python装饰器的使用

6、其实是方法log(log2(fun()))的写法,所有大家可以看到如下执行结果

python装饰器的使用

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢